Docker compose 和 dockerfile/.htaccess 问题

标签 docker apache server docker-compose dockerfile

我在一个项目中呆了几天,我的任务是使用 Docker。在学习了几个教程之后,我找到了使用 docker-compose 部署 LAMP 服务器的简单方法,如下所示:

version: '3.7'

services:
    php-httpd:
        image: php:7.3-apache
        ports:
            - 80:80
        volumes:
            - "./DocumentRoot:/var/www/html"

    mariadb:
        image: mariadb:10.5.2
        volumes:
            - mariadb-volume:/var/lib/mysql
        environment:
            TZ: "Europe/Rome"
            MYSQL_ALLOW_EMPTY_PASSWORD: "no"
            MYSQL_ROOT_PASSWORD: "rootpwd"
            MYSQL_USER: 'testuser'
            MYSQL_PASSWORD: 'testpassword'
            MYSQL_DATABASE: 'testdb'

    phpmyadmin:
        image: phpmyadmin/phpmyadmin
        links:
            - 'mariadb:db'
        ports:
            - 8081:80

volumes:
    mariadb-volume:

现在,在我的应用程序处于开发阶段后,我发现一个问题,我需要编辑 .htaccess 以打开 mod_rewrite 并为 REST API 添加一些规则。

我找到的所有解决方案都提到我应该在 dockerfile 中添加类似于此的 RUN 命令:

FROM httpd:alpine

# Copy .htaccess into DocumentRoot
COPY ./.htaccess /var/www/html/

RUN sed -i '/LoadModule rewrite_module/s/^#//g' /usr/local/apache2/conf/httpd.conf

但是我没有那个文件,官方文档对我没有帮助。

我所做的就是sudo docker-compose up -d来运行我的图像。所以问题是:

我应该在什么阶段、如何以及在哪里添加此文件才能使其正常工作。

我知道这是可能的,因为我在一个教程中发现了这样的说法:

Next time around, we'll create a more complicated docker-compose.yml file, one that works in conjunction with a Dockerfile.

但是没有后续行动。

如果有任何关于此的指导,我将不胜感激。

此外,我知道我可以通过以下方式访问 PHP 镜像:docker exec -it linuxconfig_php-httpd_1 bash。 也许我可以用它做点什么?

最佳答案

您有两个选择:

  1. Docker 是一个分层文件系统,您可以使用一个镜像并对其进行修改以创建另一个镜像,然后您可以将其推送到您的私有(private) Docker 注册表或公共(public) dockerhub。要使用 .htaccess 更改创建自定义镜像,您将创建一个名为“Dockerfile”的文件。然后,您将 Dockerfile 放在修改后的 .htaccess 所在的同一目录中

Dockerfile 内容

FROM php:7.3-apache

RUN sed -i '/LoadModule rewrite_module/s/^#//g' /usr/local/apache2/conf/httpd.conf

创建图像:

docker build -t custom-php:7.3-apache .

这将创建一个新的图像名称(custom-php:7.3-apache)。然后,您可以在 docker-compose.yml 文件中使用这个新镜像,部署后,容器将具有更新的 .htaccess

  • 您可以使用volumes选项将.htaccess挂载到所需路径,如下所示
  • .

    php-httpd:
        image: php:7.3-apache
        ports:
            - 80:80
        volumes:
            - "./DocumentRoot:/var/www/html"
            - "./.htaccess:/var/www/html/.htaccess"
    

    我更喜欢#2,因为您可以编辑 .htaccess 规则而无需重建图像。

    关于Docker compose 和 dockerfile/.htaccess 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67812384/

    相关文章:

    windows - 对 Docker-On-Windows 尝试运行 hello-world 进行故障排除

    java - SocketTimeoutException 在应用程序运行一段时间后不停地出现,但通过重新启动它立即解决

    apache - mod_proxy : sticky session does not work

    java - Apache Commons 是否适用于所有服务器?

    javascript - 无法读取未定义的属性 'username' - JavaScript

    docker - 如何使用 docker-compose 运行 SolrCloud

    bash - 使用 shell 脚本在 docker 容器中运行脚本

    docker - 如何在 docker 容器内托管 asp.net core web api

    mysql - 错误 1064 : Syntax Error MySQL

    javascript - 我的 JavaScript Post 和 Get 函数与 python 服务器发生故障