Leif160519的blog Leif160519的blog

——————

目录
修改Docker容器中的时区
/  

修改Docker容器中的时区

前几天遇到这样一个业务场景,数据库运行在docker 中,docker 的市区是utc 所以就跟北京时间相差8个小时。但是又不能重新运行一个容器,只能保证数据库运行状态,并把宿主机的时区复制给docker 容器。很苦恼,
方法一、先将宿主机的时区改成CST 北京时间。然后把宿主机的时区复制给docker 容器。命令如下

docker cp /etc/localtime [容器ID或者NAME]:/etc/localtime

方法二、进入容器进行修改时区(不过我的容器修改的时候总是报/etc/localtime 文件只读,不让修改。所以就用了上面的方法),命令如下
首先添加所有的时区

然后再修改时区

apk add tzdata 
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 
echo "Asia/Shanghai" > /etc/timezone

方法三、在容器内改,也很麻烦,每次启动新的容器那么就要修改,所以在dockerfile 中修改更好啦。命令如下

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

方法四、docker-compose.yml中新增environment参数

version:  '0.01'
services:
  mysql:
    image:  mysql:5.7
    restart:  always
    container_name:  mect-mysql
    environment:
    - TZ=Asia/Shanghai
    - MYSQL_ROOT_PASSWORD=123456
    ports:
    - 3306:3306
    volumes:
    - /root:/root:rw
    - /tmp
    - ./mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf

方法五、shell脚本中新增-e参数:

#!/usr/bin/env bash
config_dir=`pwd`
PASSWORD=123456
docker run -d --net host --name mect-mysql\
    -p 3306:3306 \
    -e MYSQL_ROOT_PASSWORD=$PASSWORD \
    -e TZ=Asia/Shanghai \
    --restart=always \
    -v ${config_dir}/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf \
    mysql:5.7
exit

“The first 90% of the code accounts for the first 90% of the development time. The remaining 10% of the code accounts for the other 90% of the development time.” – Tom Cargill

标  题修改Docker容器中的时区
作  者Leif160519
出  处https://github.icu/articles/2019/08/23/1566529213007.html
关于博主:坐标南京,运维工程师,如有问题探讨可以直接下方留言。
声援博主:如果您觉得文章对您有帮助,可以评论、订阅、收藏。您的鼓励是博主的最大动力!