【问题标题】:Edit default .htaccess in wordpress docker在 wordpress docker 中编辑默认的 .htaccess
【发布时间】:2017-12-11 20:57:57
【问题描述】:

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

【问题讨论】:

    标签: wordpress .htaccess docker docker-compose


    【解决方案1】:

    最简单的方法是在wordpress:with-netcat的基础上创建自己的图片,并做好所有必要的准备工作:

    FROM wordpress:with-netcat
    
    RUN /. EDIT YOUR .htaccess file here ./
    
    ENTRYPOINT ...
    CMD ...
    

    并使用此图像而不是原始图像。

    【讨论】:

    • 我不能这样做,因为此处所做的更改将被创建映像后运行的docker-entrypoint.sh 覆盖。它将所有内容复制到var/html/www,从而也将替换我的文件。
    • 您的回答很有帮助。仔细查看docker-entrypoint.sh发现,在将所有内容复制到var/html/www时,在修改.htaccess文件之前有一个条件检查。
    【解决方案2】:

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

    1. 我们可以使用静态.htaccess 文件并将其作为卷安装在复制原始.htaccess 的位置,即容器内的/var/html/www。从更新到这个答案,我已经验证了这个.htaccess 文件默认不会被覆盖docker-entrypoint.sh

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


    更新:@Nazar 给出的答案也是正确的。仔细查看 wordpress 图像中的默认docker-entrypoint.sh,我发现line 35 有一个条件,它检查.htaccess 文件是否已经存在并仅在文件不存在时创建一个新文件时间>。因此,如果我使用 RUN 创建自己的文件,它不会被覆盖。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多