【发布时间】:2018-04-20 01:07:06
【问题描述】:
我很困惑,因为似乎在 docker-compose.yml 中设置的环境变量会导致 docker 在 docker-compose up 上重建我的图像:
用于 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 . 构建它
docker-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
但我没有设置构建参数。 docker怎么知道,他必须重建我的形象?我在哪里可以了解这背后的原则?
【问题讨论】:
-
docker 有点生疏了! ,据我所知,docker-compose.yml 中的每一个更改都需要进行修改(因为 docker 会读取它并创建虚拟文件系统和容器行为),所以我需要将它附加到入口点,其中你可以读取一个带有 vars 的文件并在每次容器启动时加载它......
标签: docker environment-variables docker-compose