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