在Docker WordPress图像是什么原因导致应用程序文件复制延迟?
我已经创build了一个新的基于官方WordPress图像的Dockerfile
,我一直试图解决为什么我不能删除默认的主题。 我发现原因是因为在执行命令时文件实际上还没有存在。
这里是我的Dockerfile的相关行:
FROM wordpress RUN rm -rf /var/www/html/wp-content/themes/twenty*
如果我在容器运行后手动运行它,那么delete命令将按预期工作。
作为一个侧面说明,我也发现,当我复制额外的自定义主题到/var/www/html/wp-content/themes
目录,从Dockerfile
,它的工作,但不是我所期望的。 因为官方docker镜像中的任何文件都会覆盖同一个文件的自定义版本。 如果我想提供自己的configuration文件的话,我会想象得到这个方法。
所以我其实有两个问题:
- 这是与Docker相关的行为吗? 或者是在WordPress的特定图像?
- 我该如何解决这个问题? 这感觉就像一个黑客,但有没有办法从
Dockerfile
asynchronous运行延迟命令?
怎么了,本!
您的问题与Docker命名的entrypoint
引入的概念有关。 它通常是一个在运行容器时执行的脚本,包含需要在运行时运行的操作,而不是构build时间。 该脚本在运行映像后立即运行。 它们被用来使容器像服务一样行事。 使用CMD
指令设置的参数默认情况下是直接传递给入口点的参数,并且可以被覆盖。
你可以在这里find你要拖动的图像的Dockerfile的debian模板。 正如你所看到的,它调用一个名为docker-entrypoint.sh
的入口docker-entrypoint.sh
。 由于我不想太深入,基本上,它正在执行你的应用程序的安装。
由于您正在inheritanceWordPress图片,所以wordpress图片的入口点正在执行。 覆盖它,以便它不再执行也不是一个好主意,因为它会使你的图像无用。
在这种情况下,一个简单的黑客将是以下内容:
FROM wordpress RUN sed -i 's/exec \"\$\@\"/exec \"rm -rf \/var\/www\/html\/wp-content\/themes\/twenty\* \&\& \$\@\"/g'
这将重写入口点,使最后一个exec子句删除这些文件,并运行它决定运行的任何服务(通常是Apache,但我不知道在这个容器中可能是这种情况)。
我希望有帮助! 🙂