fie*_*lds 8 files copy copying docker
docker build 似乎不会覆盖它之前复制的文件。我有一个带有多个复制指令的 dockerfile,并且在较早的 COPY 指令中涉及的文件不会被后来的指令覆盖。
一个简化的示例(尽管如果第一个副本是恰好包含相关文件的整个目录也会发生这种情况):
COPY docker/config/file1.yml $BASE/config/thatfile.yml
COPY docker/config/file2.yml $BASE/config/thatfile.yml
Run Code Online (Sandbox Code Playgroud)
构建后,$BASE/config/thatfile.yml 包含 file1.yml 的内容。有没有办法让它包含file2.yml的内容?
我在这里的主要用例是复制整个配置文件文件夹,然后替换特定构建的选择配置文件。
小智 7
COPY我也经历过这种情况,但经过多次测试后发现我的指令的目标路径之一存在拼写错误。
仔细检查这些文件的真正去向
-COPY nginx.conf /etc/ngnix/nginx.conf
+COPY nginx.conf /etc/nginx/nginx.conf
Run Code Online (Sandbox Code Playgroud)
我无法理解你的问题的行为。您一定有一个拼写错误,使用了不同的版本,或者您有一个 docker-compose 卷,它在某些东西上安装了某些东西?
https://github.com/bor8/lolquadrat
git clone https://github.com/bor8/lolquadrat
cd lolquadrat/
docker build --no-cache .
Run Code Online (Sandbox Code Playgroud)
最后输出:
步骤 1/6:来自 busybox:最新
---> 19485c79a9bb
步骤2/6:ARG BASE=/opt/hihi
---> 在 e4a01850931e 中运行
卸下中间容器 e4a01850931e
---> 193009cc4df9
步骤3/6:复制 docker/config/file1.yml $BASE/config/thatfile.yml
---> bea7783ade65
步骤 4/6:运行 echo 'first thatfile:' && cat ${BASE}/config/thatfile.yml
---> 运行于 201e86de06bc
第一个文件:
文件1内容
卸下中间容器 201e86de06bc
---> ca7676a83a16
步骤5/6:复制 docker/config/file2.yml $BASE/config/thatfile.yml
---> da5985cd90fb
步骤 6/6:运行 echo '第二个 thatfile:' && cat ${BASE}/config/thatfile.yml
---> 运行于 f70153917070
第二个该文件:
文件2内容
拆卸中间容器 f70153917070
---> 5a4b17a1e77e
成功构建5a4b17a1e77e
可以清楚地看到,在第二个 COPY 命令之后,该文件thatfile.yml具有第二个文件 ( ) 的内容file2content。
正在运行的容器file2content也会显示。要测试这一点,您可以在 Dockerfile 的最后一行中创建一个CMD tail -f /dev/null,然后使用docker exec -it <CONTAINER_ID_VIA_DOCKER_PS> /bin/sh. 并用 来显示内容cat thatfile.yml。
我尚未完全测试的是文件夹(而不是file1.yml)是否存在相同的行为。
| 归档时间: |
|
| 查看次数: |
8202 次 |
| 最近记录: |