具有层缓存的 Docker 构建时秘密

tot*_*ack 3 python amazon-web-services docker aws-codeartifact

我有一个 Dockerfile,它执行pip installAWS 代码工件中的一个包。安装需要身份验证令牌,因此我当前的方法是在构建脚本中生成动态/秘密存储库 URL,并将其作为构建参数传递到 Docker,这会导致我的 Dockerfile 中出现如下行:

ARG CORE_REPO_URL
ARG CORE_VERSION
RUN pip install -i $CORE_REPO_URL mylib_core==$CORE_VERSION
Run Code Online (Sandbox Code Playgroud)

在命令中使用 ARG 会RUN导致该层永远不会被缓存,因此即使库版本没有更改,该部分每次都会重建。

有没有更好的方法来做到这一点,以便在不更改的情况下使用层缓存CORE_VERSION

也许我应该aws在图像中安装工具链,以便可以在前面的步骤中生成动态存储库 URL(每次使用相同的命令,这样就不需要 ARG 并且希望缓存该层)?这样做的一个缺点是必须将 AWS 凭证放入映像中。docker secrets如果这是唯一的解决方案,我也许可以避免这种情况。

Jes*_*Bye 5

我们已经成功使用 docker/buildkit 秘密解决了私有 npm 模块的这个问题:

RUN --mount=type=secret,id=npmrc,dst=/root/.npmrc npm install --ignore-scripts --no-audit
Run Code Online (Sandbox Code Playgroud)

当我们运行 docker build 命令时:

docker buildx build --secret id=npmrc,src=$HOME/.npmrc .
Run Code Online (Sandbox Code Playgroud)

采用这种方法时,即使令牌发生变化,缓存也不会失效。