前几天遇到这样一个业务场景,数据库运行在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容器中的时区