如何从docker-compose.yml中更改PHP:7.1-apache中的文档根目录

kjc*_*kjc 3 apache environment-variables docker docker-compose

我正在尝试为Laravel建立环境,在此过程中,我想将文档根目录更改为公用文件夹。我在Dockerfile中完成了这项工作,但实际上,我更希望在docker-compose.yml文件中进行此项工作。

我觉得我已经从他们的文档中实现了所需的环境命令

我的代码看起来像

docker-compose.yml:

version: '3'

services:
    laravel:
        image: php:7.1-apache
        ports:
            - 8080:80
        env_file: ./.env
        environment:
            - "APACHE_DOCUMENT_ROOT=/var/www/html/public"
            - "sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf"
            - "sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf"
        volumes:
            - ./src/:/var/www/html/
Run Code Online (Sandbox Code Playgroud)

.env

APACHE_DOCUMENT_ROOT=/var/www/html/public
Run Code Online (Sandbox Code Playgroud)

我首先尝试不使用.env文件,但随后给了我一个错误,指出未设置APACHE_DOCUMENT_ROOT变量。这就是为什么我有外部.env文件的原因。

谁能指导我改进这个yml,所以我的Apache有一个不同的文档根目录?

先感谢您。

kjc*_*kjc 6

我找到了解决此问题的方法。基本上,当我使用构建命令创建Dockerfile时,它就可以工作。因此,以下结构解决了该问题:

docker-compose.yml

version: '3'
services:
    web:
        build: .
        ports:
            - 80:80
        volumes:
            - ./src:/var/www/html
Run Code Online (Sandbox Code Playgroud)

Docker文件

FROM php:7.1-apache

ENV APACHE_DOCUMENT_ROOT=/var/www/html/public
RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf
RUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf
Run Code Online (Sandbox Code Playgroud)

只需记住在运行映像之前运行docker-compose build(如果其他人有相同的问题)。