1

我已经在 github 存储库提交上设置了自动构建,并且 docker hub 开始在每个存储库更新上构建,但是在 Dockerfile 中,我无法访问我的存储库中的任何源文件。即使我添加RUN ls -R /以查看构建日志,我也可以验证我的源文件没有被拉到该机器中。那么如何从 Dockerfile 脚本访问我的存储库内容呢?

4

2 回答 2

1

第一步是在 docker hub中配置BUILD RULES 。

Build Context是您希望在克隆存储库中访问的目录的位置。如果您需要完整的源内容,您可以离开它/

Dockerfile 位置指示来自Build Context的路径。如果它在源代码库的根目录中。它应该只是Dockerfile,如果它在任何目录(例如/app)内,它应该是app/Dockerfile

例如,要在任何给定的构建阶段访问完整的存储库内容,您应该将克隆的内容复制到当前的构建阶段

FROM ubuntu:20.04 AS base
WORKDIR /src
COPY . .
RUN ls

第 1 行 - 初始化构建阶段并命名为“base”

第 2 行 - 将当前构建阶段的工作目录设置为 /src,因此所有内容都将移至该位置

第 2 行 - 将所有文件和目录从 cloed repo 根目录复制到当前构建阶段的工作目录。构建上下文在这里采取行动,因为您可以从此构建上下文访问 repo 内容,如果您离开它,/您将在 /src 目录中复制完整的 repo。

第 3 行 - 运行ls命令只是为了检查根 repo 目录内容是否可用。

请记住,由于您已将源代码复制到 /src 目录中,因此只能从当前构建阶段访问它。如果您通过添加FROM some-image as final这样的另一行来初始化另一个构建阶段,则在这里您无法直接访问 /src 目录。为了从一个构建阶段访问文件到另一个构建阶段,您需要知道构建阶段的名称,访问内容的行将如下所示:

FROM some-image as final
WORKDIR /finalFiles
COPY --from=base /app/someFile .
RUN ls

在这里,我们将 someFile 从源代码库的根文件夹(如果 docker hub 中的构建上下文指定为/)复制到 /finalFiles 目录中。

于 2021-01-15T08:17:38.230 回答
0

如果您使用的是 GitHub Actions,则需要有这条小线

steps:
  - uses: actions/checkout@v2

在您访问代码之前。看这个最小的例子:

on:
  push:

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - name: Run tests
        run: |
          docker build .
于 2021-01-14T05:58:52.253 回答