docker - Docker 多阶段构建不保留 RUN 命令的结果
问题描述
我正在使用 docker-engine 17.05.0~ce-0~ubuntu-xenial 来构建这个 Dockerfile:
FROM wordpress:apache as codebase
FROM wordpress:cli as cli
COPY --from=codebase /usr/src/wordpress /var/www/html
# Create a config
RUN wp --path=/var/www/html config create --dbname=dbname --dbuser=dbuser --skip-check \
&& ls /var/www/html/wp-config.php
RUN ls /var/www/html/wp-config.php
但是输出并不像预期的那样。我从 wordpress:apache 复制的代码已正确添加到 /var/www/html,但 wp-config.php 仅在实际构建步骤中出现,而不是在生成的图像中。我不明白我在这里做错了什么。在构建时,它会像这样结束:
$ docker build -t wptest . --no-cache
Sending build context to Docker daemon 2.048kB
Step 1/5 : FROM wordpress:apache as codebase
---> 1d3cc82944da
Step 2/5 : FROM wordpress:cli as cli
---> ee57985dea6f
Step 3/5 : COPY --from=codebase /usr/src/wordpress /var/www/html
---> e10d62f3d7bc
Removing intermediate container e09a35e05108
Step 4/5 : RUN wp --path=/var/www/html config create --dbname=dbname --dbuser=dbuser --skip-check && ls /var/www/html/wp-config.php
---> Running in 8b2b3e98163e
Success: Generated 'wp-config.php' file.
/var/www/html/wp-config.php
---> b0934cfed497
Removing intermediate container 8b2b3e98163e
Step 5/5 : RUN ls /var/www/html/wp-config.php
---> Running in cda6a5c16fb5
ls: /var/www/html/wp-config.php: No such file or directory
The command '/bin/sh -c ls /var/www/html/wp-config.php' returned a non-zero code: 1
为什么在第一次 RUN 中创建的 wp-config.php 在下一步中不可用,而我使用 COPY 命令放在那里的数据仍然存在?
(如果你想知道我想要实现什么,这只是一个 MCVE。)
解决方案
wordpress:cli Dockerfile声明VOLUME /var/www/html
. 一旦该VOLUME
指令运行,该目录树的内容将永远固定;尝试将内容添加到该目录中的COPY
andRUN
语句无效。
推荐阅读
- web-scraping - 如何使用python在重定向后(浏览器给出的那个)获取正确的url
- c++ - TypeScript Record 类型,C++ 等效
- python - 如何通过根据数据框重命名两个数据框来连接它们?
- c# - Newtonsoft.Json 在 .NET 5 / Core 和 .NET Framework 上的不同行为
- xamarin - Xamarin 表单列表视图“null”
- mysql - 为什么 set uuid = (select uuid()); mysql 中的更新不适用于此查询?
- r - 修正标准误,当第二阶段是托比特回归时
- list - 在保持顺序的同时拆分列表中的项目
- r - 删除从 NA 因子派生的 facet_grid 面板
- javascript - 如何防止在 Chrome 扩展中的内容脚本元素 onclick() 中进一步执行鼠标单击?