我有一个运行一些Dockerfiles的docker-compose文件来创建我的容器。我不想编辑我的Dockerfiles来设置时区,因为它们可以随时由我的团队成员进行更改,并且我有一个docker-compose.override.yml文件来进行本地环境更改。但是,我的一个容器(基于Selenium的容器)似乎没有拉出主机时区,这对我来说是个问题。基于此我想在我的所有容器上强制执行时区。在我的Dockerfiles中,我现在
ENV TZ=America/Denver
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
一切正常。如何在docker-compose语法中复制相同的命令?
答案 0 :(得分:19)
version "2"
services:
serviceA:
...
environment:
TZ: "America/Denver"
command: >
sh -c "ln -snf /usr/share/zoneinfo/$TZ /etc/localtime &&
echo $TZ > /etc/timezone &&
exec my-main-application"
编辑:问题没有提出要求,但我刚刚添加exec my-main-application
来说明如何指定主要流程。 exec
在此非常重要,以确保my-main-application
收到Ctrl-C(SIGINT / SIGKILL)。
答案 1 :(得分:5)
这是简单的解决方案:
environment:
- TZ=America/Denver
答案 2 :(得分:3)
最简单的解决方案是像这样在docker-compose.yml中共享卷
ipchanger:
image: codertarasvaskiv/ipchanger:raspberry
volumes:
- "/etc/localtime:/etc/localtime:ro"
答案 3 :(得分:2)
docker-compose -f docker-compose.yaml stop
docker-compose -f docker-compose.yaml rm
docker-compose -f docker-compose.yaml start
这是我的mysql的docker-compose.yaml
提醒,您需要重新创建容器,而不是重新启动。 如果您更改了Yaml,则需要重新创建
ID PRICE DURATION
1 10 30
2 200 730
3 40 60
4 300 400
5 100 180
答案 4 :(得分:0)
version: '2'
services:
ServiceA:
image: image:
- '/etc/localtime:/etc/localtime:ro'