docker服务设置时区(两种方案)
在开始之前先介绍docker的概念,docker可以理解为我们现在见过的应用商店,docker中的各种镜像可以理解为应用商店的各种软件
docker是建立在系统上的,但是docker是美国商店,所以他的时间会比我们现在的时间少了8小时
一般在安装docker后,docker里面的时区会和北京时间差8小时,如果是使用docker内的时间,或者docker里面安装了mysql服务,mysql的now()拿到的时间会比当前时间少了8小时
今天来操作修改为北京时间
当针对对那个容器时,可以这样做
打印容器中显示的当前时间
docker exec -it dcab341440a0 date
进入mysql容器
docker exec -it dcab341440a0 /bin/sh
时间校对
ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo Asia/Shanghai > /etc/timezone
再次查看mysql的时间
以上介绍针对了单个的docker服务设置时区,请记得重启mysql镜像,其中mysql-test为我的镜像名称
使用镜像id操作也是可以的
停止mysql镜像
docker stop mysql-test
启动mysql镜像
docker start mysql-test
下面来对开始使用的镜像开始制作
Dockerfile 中创建时区文件
在构建基础镜像或在基础镜像的基础上制作自定义镜像时,在 Dockerfile 中创建时区文件即可解决单一容器内时区不一致问题,且后续使用该镜像时,将不再受时区问题困扰
执行以下命令,新建 Dockerfile.txt 文件 vim Dockerfile.txt
按 i 切换至编辑模式,写入以下内容,配置时区文件 FROM mysql:5.7 RUN rm -f /etc/localtime \ && ln -sv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ && echo "Asia/Shanghai" > /etc/timezone \ && echo "[mysqld]" > /etc/my.cnf \ && echo "default-time-zone=+08:00" >> /etc/my.cnf
请务必检查/etc/my.cnf文件存在
按 Esc,输入 :wq,保存文件并返回
执行以下命令,构建容器镜像 docker build -t mysql-test:5.7 -f Dockerfile.txt .
mysql-test是定义的镜像的名字,5.7代表mysql的版本,记得最后面的点不要去了
使用docker run 用于运行 Docker 镜像并创建容器实例 docker run --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql-test:5.7
打印镜像中的时间 docker exec -it mysql-test date
如果看不懂文字,可以b站搜索"喵星人2070"查看对应的视频