我有一个wordpress容器,由docker-compose文件生成。 WordPress容器默认包含.htaccess
文件。 我想对其进行编辑,以便只在创建容器时执行一次编辑。
我有一个wordpress容器,由docker-compose文件生成。 WordPress容器默认包含.htaccess
文件。 我想对其进行编辑,以便只在创建容器时执行一次编辑。
目前,我可以想到两种可能的解决方案:
我们可以使用一个静态的 .htaccess
文件,并将其挂载为容器内原始 .htaccess
所复制的位置的卷,即在容器内的 /var/html/www
。从对这个问题的更新中,我已经验证了默认的 docker-entrypoint.sh
不会覆盖这个 .htaccess
文件。
我们可以使用来自wordpress docker的docker-entrypoint.sh,该文件位于github,并修改创建 .htaccess
文件的部分。这将保持 entrypoint 的默认行为,并且 .htaccess
文件也将被修改。
更新:由@Nazar给出的答案也是正确的。仔细查看 wordpress image 中的默认 docker-entrypoint.sh,我发现在 第35行有一个条件判断,检查是否已经存在 .htaccess
文件,只有当文件不存在时才创建新文件。因此,如果我使用 RUN
创建自己的文件,则该文件将不会被覆盖。
FROM wordpress:with-netcat
RUN /. EDIT YOUR .htaccess file here ./
ENTRYPOINT ...
CMD ...
使用这张图片替代原始图片。
如果您将主机上的目录挂载到/var/www/html
(例如使用-v /host/path:/var/www/html
或类似选项),这可能会很棘手 - 卷挂载将覆盖镜像中的任何内容。
如果您的主机没有任何挂载,只需添加COPY .htaccess /var/www/html/.htaccess
(或使用RUN
修改现有文件)即可。
为了避免卷挂载覆盖镜像的htaccess文件,请编写一个入口脚本来覆盖该文件。因为入口点在挂载存在后运行,所以它一定会生效。
创建一个自定义入口点shell脚本,将您的htaccess文件复制到/var/www/html
,然后启动默认入口点:
#!/usr/bin/env bash
# entrypoint.sh
cp /my-htaccess-file /var/www/html/.htaccess
# run the entrypoint from the ancestor image
docker-entrypoint.sh "$@"
然后在您的Dockerfile中将自己的htaccess文件复制到已知位置,添加入口脚本并(重新)设置镜像命令:
FROM wordpress:5.8.2-php7.4
COPY entrypoint.sh /my-entrypoint.sh
# RUN chmod +x /my-entrypoint.sh # uncomment if your source file is not executable
COPY .htaccess /my-htaccess-file
ENTRYPOINT ["/my-entrypoint.sh"]
# whenever the entrypoint is set, the command must also be set again
# this is the default CMD from the ancestor image.
CMD ["apache2-foreground"]
docker-entrypoint.sh
,所做的更改将被覆盖。它会将所有内容复制到var/html/www
,从而也会替换我的文件。 - Ayushyadocker-entrypoint.sh
后,我发现在将所有内容复制到var/html/www
时,在修改.htaccess
文件之前进行了条件检查。 - Ayushya