在Dockerfile

时间:2017-11-07 15:08:17

标签: docker environment-variables docker-compose

我很困惑,因为似乎在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

但我没有设置构建参数。码头工如何知道,他必须重建我的形象?我在哪里可以阅读这背后的原理?

1 个答案:

答案 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

这只是一个想法,也许不是最好的方式,是我过去如何处理它。