Docker compose和dockerfile/.htaccess问题

Docker compose和dockerfile/.htaccess问题,docker,apache,server,docker-compose,dockerfile,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&

我在一个项目中工作了几天,我的任务是使用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
但是我没有那个文件,官方文件对我也没有帮助

我所做的就是运行我的图像。所以问题是:

我应该在哪个阶段、如何以及在何处添加此文件以使其正常工作。

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

下一次,我们将创建一个更复杂的docker-compose.yml 文件,与Dockerfile一起工作的文件

但没有后续行动

如果您能给我一些指导,我将不胜感激

我还知道我可以使用:
docker exec-it linuxconfig\u PHP-httpd\u 1 bash访问PHP映像。
也许我可以做点什么?

您有两个选择:

  • Docker是一个分层文件系统,您可以使用一个映像并对其进行修改以创建另一个映像,然后将其推送到您的私有Docker注册表或公共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 .
    
    这将创建一个新的图像名称(定制php:7.3-apache)。然后,您可以在docker-compose.yml文件中使用此新映像,部署时,容器将具有更新的.htaccess

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

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

    感谢您的时间,我仍在尝试查找.htaccess中需要的内容,但我会选择第二个选项,但不确定我应该将新的.htaccess文件放在该卷的何处。我已将其放在composer文件旁边的根目录中,他将其装入公用文件夹的根目录中,但它似乎是空的。我收到内部服务器错误服务器遇到内部错误或配置错误,无法完成您的请求。我只是报告一下,我没有在php中打开模式重写模块,我设法用a2enmod rewrite将其打开,但htaccess在根目录中仍然加载为空。而且没有效果。稍后我将尝试第一个选项…尝试在卷中使用绝对路径而不是相对路径:部分更改路径没有帮助,我得到了有关卷的错误,当尝试使用选项1时,我得到:
    =>错误[2/2]运行sed-i'/LoadModule rewrite_module/s/^#/g'/usr/local/apache2/conf/httpd.conf 0.5s------->[2/2]运行sed-i'/LoadModule rewrite_module/s/^#//g'/usr/local/apache2/conf/httpd.conf:#5 0.522 sed:can't read/usr/local/apache2/conf/httpd.conf:没有这样的文件或目录
    ,所以我仍然卡住了。。。“docker简约”到此为止
    php-httpd:
        image: php:7.3-apache
        ports:
            - 80:80
        volumes:
            - "./DocumentRoot:/var/www/html"
            - "./.htaccess:/var/www/html/.htaccess"