如何选择将锁定文件添加到 docker 容器?
Posted
技术标签:
【中文标题】如何选择将锁定文件添加到 docker 容器?【英文标题】:How can I optionally add a lockfile to a docker container? 【发布时间】:2019-08-12 11:25:21 【问题描述】:我正在尝试构建一个 docker 镜像,该镜像在构建时可以选择添加一个纱线(或 npm 锁定文件)。我想明确添加它,但如果不包含它,也不会使构建失败。
如果托管应用程序使用确定性构建过程,其目的是尊重它,而不是强制它。我还想让应用程序使用这个容器将自己引导到确定性构建中。
这是我要开始的:
FROM node:8.12.0-alpine
USER node
WORKDIR $my_workdir
COPY --chown=node:node src/yarn.lock ./
COPY --chown=node:node src/package*.json ./
RUN yarn && yarn cache clean
COPY --chown=node:node src/ .
CMD []
如果src/yarn.lock
文件不在文件系统上,我是否可以使用不会失败的命令或选项来代替复制?
【问题讨论】:
我认为这个答案将阐明为什么如果文件不存在,COPY 总是会失败,以及为什么别无选择:***.com/questions/31528384/… 通常最好的做法是将这些锁定文件检查到源代码管理中,因此它应该始终存在。 如果你在复制完整的src/
目录之后运行 yarn 会发生什么,同时隐式复制(潜在的) yarn.lock?您是否需要使用源存储库中的文件覆盖由 yarn 生成的文件的能力?
@ChristophBurschka 通常你复制 package.json 和 yarn.lock 并在复制源代码之前运行 yarn/npm 以利用构建缓存,就好像依赖定义没有改变一样,这一步将使用缓存。
啊,我明白了。独立于源代码缓存纱线构建是有意义的;是的。
【参考方案1】:
您可以尝试将 yarn.lock 添加为 yarn.lock*
以及另一个文件,这样 COPY 就不会失败。沿着这些路线的东西应该可以解决问题:
FROM node:8.12.0-alpine
USER node
WORKDIR $my_workdir
COPY --chown=node:node src/package*.json src/yarn.lock* ./
RUN yarn && yarn cache clean
COPY --chown=node:node src/ .
CMD []
希望对你有帮助!
【讨论】:
以上是关于如何选择将锁定文件添加到 docker 容器?的主要内容,如果未能解决你的问题,请参考以下文章