我很困惑,因为似乎在docker-compose.yml中设置的环境变量会导致docker在docker-compose上重建我的图像:
apache_php_with_custom_docroot的Dockerfile
FROM php:7.1.11-apache-jessie
# Set apache document root
ENV APACHE_DOCUMENT_ROOT /var/www/web
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 build -t apache_php_with_custom_docroot .
搬运工-compose.yml
version: "3"
services:
web:
image: apache_php_with_custom_docroot
environment:
- APACHE_DOCUMENT_ROOT=/var/www/anotherfolder
所以,对我来说奇怪的是:它可以设置APACHE_DOCUMENT_ROOT。当我运行docker-compose up -d
时,apache使用docroot /var/www/anotherfolder
。
我确信,当我的图像构建完成后,我无法在我的docker-compose文件中更改它。我读了一些关于build
参数的内容,例如在这里:Docker-compose: Set a variable in env file and use it in Dockerfile
但我没有设置构建参数。码头工如何知道,他必须重建我的形象?我在哪里可以阅读这背后的原理?
答案 0 :(得分:-1)
在dockerfile中定义一个入口点,如:
ENTRYPOINT bash $APACHE_DOCUMENT_ROOT/entrypoint.sh
然后在每次容器启动时的入口点,您将能够使用文件读取映射的卷并注入容器或声明您将需要的环境或相关的启动任务
enviroment=$(cat /mapped_config/enviroment.env)
if grep -Fxq "$enviroment" /home/.bashrc
then
echo "Environment setted propertly"
else
echo "$enviroment" >> /home/.bashrc
echo "enviorment setted!"
fi
这只是一个想法,也许不是最好的方式,是我过去如何处理它。