我正在尝试为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的文档根目录不同吗?
谢谢。
答案 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 update
和apt-get install vim
)
最后重新加载Apache:
/etc/init.d/apache2 reload