首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dockerfile副本接受文件的陈旧副本吗?

Dockerfile副本接受文件的陈旧副本吗?
EN

Stack Overflow用户
提问于 2016-04-13 06:10:37
回答 1查看 399关注 0票数 3

我的Dockerfile中有以下命令序列;请注意,使用sed替换的

代码语言:javascript
复制
RUN sed -i "s/replace this/with that/g" ./dir/file.yaml
COPY ./dir/file.yaml /usr/src/app/node_modules/serve-swagger-editor/node_modules/swagger-editor/spec-files/

这几乎运行良好,即将file.yaml复制到目标位置,但是:

  • ./dir/file.yaml包含sed所做的更改,
  • /usr/src/.../spec-files/file.yaml没有。

事实证明,这一解决办法解决了复制问题:

代码语言:javascript
复制
RUN sed -i "s/replace this/with that/g" ./dir/file.yaml
RUN cp ./dir/file.yaml /usr/src/app/node_modules/serve-swagger-editor/node_modules/swagger-editor/spec-files/

有人能解释一下这种奇怪的行为吗?

EN

回答 1

Stack Overflow用户

发布于 2016-04-13 06:24:03

RUN在容器中执行命令,因此sed被应用于容器中的文件./dir/file.yaml。您可能在WORKDIR/dir/file.yaml (沃克迪尔)中有一个/相同的文件,这解释了为什么第二个选项可以工作。

第一个版本中的COPY用主机构建目录中的./dir/file.yaml覆盖/usr/src/app/node_modules/serve-swagger-editor/node_modules/swagger-editor/spec-files/文件。因为它在容器之外,所以它以前没有受到sed命令的影响。

因此,您可以做的是首先在容器中COPY文件,然后使用RUN命令来修改它。或者在运行docker build之前修改它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36589996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档