编辑WordPress Docker中默认的.htaccess文件

10

我有一个wordpress容器,由docker-compose文件生成。 WordPress容器默认包含.htaccess文件。 我想对其进行编辑,以便只在创建容器时执行一次编辑。

3个回答

8

目前,我可以想到两种可能的解决方案:

  1. 我们可以使用一个静态的 .htaccess 文件,并将其挂载为容器内原始 .htaccess 所复制的位置的卷,即在容器内的 /var/html/www。从对这个问题的更新中,我已经验证了默认的 docker-entrypoint.sh 不会覆盖这个 .htaccess 文件。

  2. 我们可以使用来自wordpress docker的docker-entrypoint.sh,该文件位于github,并修改创建 .htaccess 文件的部分。这将保持 entrypoint 的默认行为,并且 .htaccess 文件也将被修改。


更新:由@Nazar给出的答案也是正确的。仔细查看 wordpress image 中的默认 docker-entrypoint.sh,我发现在 第35行有一个条件判断,检查是否已经存在 .htaccess 文件,只有当文件不存在时才创建新文件。因此,如果我使用 RUN 创建自己的文件,则该文件将不会被覆盖。


2
最简单的方法是基于wordpress:with-netcat构建自己的镜像,并进行所有必要的准备工作:
FROM wordpress:with-netcat

RUN /. EDIT YOUR .htaccess file here ./

ENTRYPOINT ...
CMD ...

使用这张图片替代原始图片。


1
我无法做到这一点,因为在创建镜像后会运行 docker-entrypoint.sh,所做的更改将被覆盖。它会将所有内容复制到 var/html/www,从而也会替换我的文件。 - Ayushya
1
你的回答很有帮助。在仔细查看 docker-entrypoint.sh 后,我发现在将所有内容复制到 var/html/www 时,在修改 .htaccess 文件之前进行了条件检查。 - Ayushya

0

如果您将主机上的目录挂载到/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"]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接