Javascript 如何选择向docker容器添加锁文件?

Javascript 如何选择向docker容器添加锁文件?,javascript,docker,npm,yarnpkg,lockfile,Javascript,Docker,Npm,Yarnpkg,Lockfile,我正在尝试构建一个docker映像,在构建时可以选择添加一个纱线(或npm锁文件)。我想明确地添加它,但如果没有包含它,也不会使构建失败 其目的是在宿主应用程序使用确定性构建过程时尊重它,而不是强迫它这样做。我还想让应用程序使用这个容器将自己引导到确定性构建中 我从这里开始: FROM node:8.12.0-alpine USER node WORKDIR ${my_workdir} COPY --chown=node:node src/yarn.lock ./ COPY --chown=no

我正在尝试构建一个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/warn.lock
文件不在文件系统中,我是否可以使用一个命令或选项来代替复制而不会失败?

您可以尝试将warn.lock添加为
warn.lock*
,与另一个文件一起,这样复制就不会失败。沿着这条路线应该可以做到这一点:

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 []


希望有帮助

我认为这个答案将澄清为什么如果文件不存在,复制总是失败,为什么没有其他选择:通常最佳做法是将这些锁定文件检查到源代码管理中,因此它应该始终存在。如果在复制完整的
src/
目录后运行Thread,隐式复制(潜在的)会发生什么你也喜欢锁吗?您是否需要能够使用源存储库中的文件覆盖由Thread生成的文件?@ChristophBurschka通常在复制源代码之前复制package.json和Thread.lock并运行Thread/npm,以利用构建缓存,就好像依赖项定义没有更改一样,这一步将使用缓存。啊,我明白了。独立于源代码缓存构建是有意义的;对。