Docker-compose:在env文件中设置一个变量并在Dockerfile中使用它

时间:2017-08-22 09:54:52

标签: docker docker-compose dockerfile

我使用Docker和Docker-compose构建了一堆nginx + php。

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

.ENV

# Timezone
TIMEZONE=Europe/Madrid

搬运工-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中手动编写区域,它就可以工作。

1 个答案:

答案 0 :(得分:4)

您需要在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传递给正在运行的容器,而不是传递给构建文件。您需要在args部分

中传递build