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

时间:2018-07-18 04:15:09

标签: apache docker docker-compose environment-variables

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

我觉得我已经从他们的documentation实施了必需的环境命令

我的代码如下

docker-compose.yml:

set.seed(2017)
df <- data.frame(
    a = sample(100, 10^6, replace = T),
    b = sample(100, 10^6, replace = T))

library(microbenchark)
res <- microbenchmark(
    method_lag = {
        df <- mutate(df, c = lag(a) + lag(b) - a)
    },
    method_base = {
        df$c <- NA
        df$c[-1] <- df$a[-nrow(df)] + df$b[-nrow(df)] - df$a[-1]
    },
    method_shift = {
        df$c <- shift(df$a) + shift(df$b) - df$a
    })
#Unit: milliseconds
#         expr      min       lq     mean   median        uq       max neval cld
#   method_lag 19.88495 21.81414 29.30085 23.83718  26.61746 107.04355   100  b
#  method_base 51.00888 56.29822 90.05291 60.65321 128.79227 208.80537   100   c
# method_shift 10.86351 12.51993 18.34094 14.24705  16.88488  92.83246   100 a

autoplot(res)

.env

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/

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

有人可以引导我改进这个yml,因此我的Apache的文档根目录不同吗?

谢谢。

3 个答案:

答案 0 :(得分:4)

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

docker-compose.yml

version: '3'
services:
    web:
        build: .
        ports:
            - 80:80
        volumes:
            - ./src:/var/www/html

Dockerfile

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

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

答案 1 :(得分:0)

您正在“环境部分”中运行sed命令。相反,您可以使用“命令”部分来执行sed命令。这些命令将在Docker的入口点之后运行。因此,更新后的docker-compose.yaml如下所示:

 version: '3'

services:
    laravel:
        image: php:7.1-apache
        ports:
            - 8080:80

        command:
            - export APACHE_DOCUMENT_ROOT=/path/to/new/root
            - 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/

请更新您的docker-compose.yaml文件,然后告诉我是否可以解决您的问题

答案 2 :(得分:0)

要测试临时解决方案,可以手动更改apache .conf文件。 在容器运行时,输入bash:

docker exec -it your_container_name bash

编辑.conf文件的内容:

vim /etc/apache2/sites-available/000-default.conf

(如果未找到vim,请运行apt-get updateapt-get install vim

最后重新加载Apache:

/etc/init.d/apache2 reload