命令无法在docker compose中的“command”部分工作

问题描述 投票:0回答:1

我尝试使用php:7.2-apache来运行我的(Laravel)代码。因为我们目前在生产服务器上有apache。

但是我需要加载模块mod_rewrite,对我来说默认情况并非如此。

泊坞窗,compose.yml

  apache:
    restart: unless-stopped
    image: php:7.2-apache
    container_name: apache_l
    command: bash -c "a2enmod rewrite && service apache2 restart"
    ports:
    - 80:80
    - 443:443
    environment:
      - APACHE_DOCUMENT_ROOT=/var/www/html/public/
    volumes:
    - .:/var/www/html
    - ./docker/php-ini/php.ini:/usr/local/etc/php/php.ini
    - ./docker/sites-enabled:/etc/apache2/sites-enabled/

我写了这个命令,以便按照这里的建议启动mod_rewrite:https://github.com/docker-library/php/issues/179

如果我在容器中手动运行这些命令,它可以工作,但是在这样的命令部分,我得到一个错误日志:

启用模块重写。

要激活新配置,您需要运行:

service apache2 restart

AH00558:apache2:无法使用192.168.0.3可靠地确定服务器的完全限定域名。全局设置“ServerName”指令以禁止显示此消息

重新启动Apache httpd Web服务器:apache2。

模块重写已启用

...

为什么它只能在手动运行这些命令时才有效?

奖金问题:(不是那么重要)为什么APACHE_DOCUMENT_ROOT环境变量不起作用。我必须手动更改:/etc/apache2/sites-enabled/中的配置才能工作,但变量是公布的。

docker-compose
1个回答
0
投票

我通过第一次运行修复了另一种方式

docker cp apache_l:/etc/apache2/ .\docker\

这会将整个配置目录复制到主机,然后将该目录作为卷安装在docker-compose.yml中

apache:
    restart: unless-stopped
    image: php:7.2-apache
    container_name: apache_l
#    depends_on:
#    - openssl
    ports:
    - 80:80
    - 443:443
    environment:
      - APACHE_DOCUMENT_ROOT=/var/www/html/public/
    volumes:
    - .:/var/www/html
    - ./docker/apache2:/etc/apache2/

我还从mods-available / rewrite.load到mods-enabled / rewrite.load创建了一个符号链接

© www.soinside.com 2019 - 2024. All rights reserved.