【问题标题】:Docker-compose: Set a variable in env file and use it in DockerfileDocker-compose:在 env 文件中设置一个变量并在 Dockerfile 中使用它
【发布时间】:2017-08-22 09:54:52
【问题描述】:

我正在使用 Docker 和 Docker-compose 构建一个 nginx+php 的堆栈。

我正在尝试在我的 .env 文件中设置时区并在 Dockerfile 中使用它,但我可能会误解 documentation 中的某些内容。

.env

# Timezone
TIMEZONE=Europe/Madrid

docker-compose.yml

version '2'

services:
    php:
        build: php7-fpm
        volumes:
            - ${APP_PATH}:/var/www/app
            - ./logs:/var/www/logs
        environment:
            TIMEZONE: ${TIMEZONE}

#[...more.stuff...]

php7-fpm/Dockerfile

FROM php:7.0-fpm
ARG TIMEZONE

#[...more.stuff...]

ENV TIMEZONE=${TIMEZONE}
RUN ln -snf /usr/share/zoneinfo/$TIMEZONE /etc/localtime && echo $TIMEZONE > /etc/timezone
RUN printf '[PHP]\ndate.timezone = "%s"\n', $TIMEZONE > /usr/local/etc/php/conf.d/tzone.ini

容器内的时区设置不正确(在 php 容器 bash 内运行 php --info | grep timezone)。如果我在 Dockerfile 中手动编写区域,它可以工作。

【问题讨论】:

  • 这里的实际问题是什么?
  • 容器内的时区设置不正确。如果我在 Dockerfile 中手动编写区域,它可以工作。

标签: docker docker-compose dockerfile


【解决方案1】:

你需要在 docker compose 中传递 build 参数

version '2'

services:
    php:
        build: 
          dockerfile: php7-fpm
          args:
            TIMEZONE: ${TIMEZONE}
        volumes:
            - ${APP_PATH}:/var/www/app
            - ./logs:/var/www/logs

environment 被传递给正在运行的容器,而不是构建文件。对于您需要在build 部分中传递args

【讨论】:

  • 是的,您甚至可以使用docker-compose 传递那些,请参阅我的回答中的撰写文件
  • 我的意思是在docker build 步骤中通过--build-arg,因为他在实际运行应用程序之前使用了那些(或者至少在我看来是这样)
  • 在撰写文件中带有build: php7-fpm。这意味着docker-compose 也在构建图像
  • 哦,错过了那部分。谢谢,我通常不会在撰写文件中包含构建步骤
  • 现在清除,谢谢!顺便说一句,我认为参数environment 不再需要了。
猜你喜欢
  • 2019-09-11
  • 2020-11-07
  • 1970-01-01
  • 2018-02-11
  • 2021-12-13
  • 1970-01-01
  • 2017-12-15
  • 2021-01-26
  • 2018-04-20
相关资源
最近更新 更多