心安

修改Docker时区

字数统计: 656阅读时长: 2 min
2019/01/08 Share

解决Docker时区和宿主机不同步的问题

前言

之前在公司用docker没有注意时区的问题,导致了很多服务处理时间很蛋疼。
因为宿主机,也就是我们的服务器时间是+8时区的,但是Docker默认是0时区的。
我们的测试数据库和Java服务用的docker起的,是0时区的,而正式数据库是阿里云的数据库,是+8时区的。
这样时区不统一,处理起来就麻烦,本地没问题、测试没问题、上正式就出问题。
废话不多说,下面就说一下我踩的坑,希望能帮助到各位。

修改新启动的容器的时区

今天新起了一个服务,就想着这次得在启动容器的时候就搞定时区问题。
一顿百度,一顿尝试之后,发现只需要把宿主机的时区文件映射到容器内即可。

docker:

1
docker run -v /etc/timezone:/etc/timezone -v /etc/localtime:/etc/localtime xxx

docker-compose.yml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
version: '2'
services:
java_service:
container_name: java-service-test
image: maven:3.5.4-jdk-8-alpine
volumes:
- /root/.m2:/root/.m2
- /docker/java-service/test:/usr/src/mymaven
# 主要是加下面两行代码
- /etc/timezone:/etc/timezone
- /etc/localtime:/etc/localtime
ports:
- "8080:8080"
command: "/bin/sh /usr/src/mymaven/docker-entrypoint.sh"

另外,公司用的是springboot框架,修改application.yml,如下:

1
2
3
4
spring:
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8

这样就能保证打印日志的时间、代码输出的时间、存入到数据库的时间、返回的json数据的时间全都是+8时区了。

修改正在运行的Docker容器的时区

由于很多服务已经启动很久了,所以需要修改这些正在运行的容器的时区。
查阅资料,centos可以使用以下方式,其他操作系统,抱歉博主没有环境也没有时间。。

  1. 进入到容器内部
1
2
3
4
5
# 找到要操作容器的id
docker ps

# 进入容器
docker exec -it [容器id] bash
  1. 为宿主机时区文件与容器文件建立链接
1
2
# 注意,这条命令是在容器内部执行的
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
  1. 重启容器
1
docker-compose restart

这里第二条命令的作用是为某一个文件或者目录在另外一个位置建立一个同步的链接,可以理解为超链接。

已上就是本文为您带来的关于修改docker时区的内容,有疑问的欢迎评论区提问。
喜欢本文可以收藏一下博主或者给博主走一波赞助,感谢观看。

原文作者:XinAnzzZ

原文链接:https://www.yuhangma.com/2019/docker/2019-01-08-docker-timezone/

发表日期:January 8th 2019, 12:00:00 am

更新日期:September 26th 2019, 10:46:42 am

版权声明:(转载本站文章请注明作者和出处 心 安 – XinAnzzZ ,请勿用于任何商业用途)

CATALOG
  1. 1. 解决Docker时区和宿主机不同步的问题
    1. 1.1. 前言
    2. 1.2. 修改新启动的容器的时区
    3. 1.3. 修改正在运行的Docker容器的时区