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

Car*_*sAS 5 docker dockerfile docker-compose

我正在使用Docker和Docker-compose来构建一堆nginx + php.

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

.ENV

# Timezone
TIMEZONE=Europe/Madrid
Run Code Online (Sandbox Code Playgroud)

泊坞窗,compose.yml

version '2'

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

#[...more.stuff...]
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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

Tar*_*ani 5

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

version '2'

services:
    php:
        build: 
          dockerfile: php7-fpm
          args:
            TIMEZONE: ${TIMEZONE}
        volumes:
            - ${APP_PATH}:/var/www/app
            - ./logs:/var/www/logs
Run Code Online (Sandbox Code Playgroud)

environment被传递给正在运行的容器,而不是传递给buildfile。对于需要传递argsbuild部分