Docker-Compose配置容器时区

时间:2019-03-01 07:06:39

标签: python docker docker-compose

我有一个在docker中运行的python应用程序。在应用程序中,我使用的是datetime.now()函数,此函数从容器时区获取值。所以我应该配置容器时区。

我的目录结构:

- myapp (project folder)
- DockerFile
- docker-compose.yml
- requirement.txt
- run.py

我的Dockerfile:

FROM ubuntu:latest

ENV TZ=Europe/Istanbul
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

RUN apt-get update -y
RUN apt-get install -y python-pip python-dev build-essential

COPY . /app
ENV HOME=/app
WORKDIR /app

RUN pip install -r requirements.txt

ENV LOGIN_USERNAME=master_login_username
ENV LOGIN_PASSWORD=master_login_password

ENV SLAVE_LOGIN_USERNAME=slave_login_username
ENV SLAVE_LOGIN_PASSWORD=slave_login_password

ENV AWS_ACCESS_KEY_ID=....
ENV AWS_SECRET_ACCESS_KEY=....
ENV CLUSTER_NAME=....

EXPOSE 5000

ENTRYPOINT ["gunicorn","-b","0.0.0.0:5000","-w","1","myapp:create_app()","--access-logfile","/app/myapp/logs/access.log","--error-logfile","/app/myapp/logs/error.log","--timeout","90"]

我的docker-compose.yml:

version: '3.5'
services:
  master:
    build: .
    ports:
      - "5000:5000"
    container_name: master
    environment:
      - MONGO_URI=mongodb://mongodb:27017/master
  mongodb:
    image: mongo:latest
    container_name: "mongodb"
    environment:
      - MONGO_DATA_DIR=/usr/data/db
      - MONGO_LOG_DIR=/dev/null
    ports:
      - 27017:27017
    command: mongod --smallfiles --logpath=/dev/null # --quiet
networks:
  default:
    name: master

因此,实际上我在Dockerfile中配置了时区。但是我正在使用docker-compose up --build进行构建,并且容器时区不变。

当我构建时没有撰写为docker build -t并以docker run --name slave -d -p 80:5000运行时,时区是我想要的。

我想念什么?

感谢和问候。

3 个答案:

答案 0 :(得分:0)

您需要在docker-compose中设置环境变量

version: '3.5'
services:
  master:
    build: .
    environment:
      - "TZ=Europe/Istanbul" 
    ports:
      - "5000:5000"
    container_name: master
    environment:
      - MONGO_URI=mongodb://mongodb:27017/master
  mongodb:
    image: mongo:latest
    container_name: "mongodb"
    environment:
      - MONGO_DATA_DIR=/usr/data/db
      - MONGO_LOG_DIR=/dev/null
    ports:
      - 27017:27017
    command: mongod --smallfiles --logpath=/dev/null # --quiet
networks:
  default:
    name: master

答案 1 :(得分:0)

我解决了这个问题。实际上,我检查了/ usr / share / zoneinfo文件夹是否存在。我看到那不存在。因此,缺少Tzdata软件包。我在Dockerfile apt-get install tzdata -y中添加了行,并解决了我的问题。

答案 2 :(得分:0)

更新/etc/timezone是通常的方法,但是至少就我而言,我还必须做其他事情:创建从所需时区到etc/localtime的链接,然后重新配置tzdata (如果没有,请先安装):

# Set TimeZone to Spain (mainland)
ENV TZ=Europe/Madrid
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && dpkg-reconfigure -f noninteractive tzdata

最诚挚的问候!