一尘不染

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

docker

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

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

.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 --info | grep timezone在php容器bash中运行)。如果我在Dockerfile中手动编写区域,那么它将起作用。


阅读 2659

收藏
2020-06-17

共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被传递给正在运行的容器,而不是传递给buildfile。对于需要传递argsbuild部分

2020-06-17