【问题标题】:Using env variables from docker compose in a Dockerfile在 Dockerfile 中使用来自 docker 的 env 变量组合
【发布时间】: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


【解决方案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

这只是一个想法,可能不是最好的方法,是我过去的处理方式。

【讨论】:

  • -1,因为这不是我的问题的答案。我不明白为什么我的代码有效,我没有寻找答案如何以另一种方式完成......
  • 我只是想解释一下,当您执行 docker-compose up 时,docker 将读取您的 docker-compose.yml 文件并构建您的映像(使用您定义的配置和变量),如果您将进行任何操作更改 docker-compose 文件(例如更改 env var 等),如果您想在容器启动时动态读取某些内容,则需要重新构建(而不是停止、启动或重新启动),您可以在入口点执行此操作
猜你喜欢
  • 2021-05-24
  • 1970-01-01
  • 1970-01-01
  • 2021-12-13
  • 2021-07-02
  • 2019-05-27
  • 2018-10-22
  • 2017-03-13
  • 1970-01-01
相关资源
最近更新 更多