Docker容器與宿主機時間同步解決方案

每日一句

You cannot improve your past, but you can improve your future. Once time is wasted, life is wasted.
你不能改變你的過去,但你可以讓你的未來變得更好。一旦時間浪費了,生命就浪費了。

概述

如果在啟動Docker容器的過程中沒有單獨配置localtime,很可能造成Docker容器時間與主機時間不一致的情況,比如UTC和CST相差8小時,換句話來說就是容器時間與北京時間相差8個小時

可以通過 date 命令分別查看容器和宿主機系統(tǒng)時間

解決方法

1. docker run 添加參數(shù)

-v /etc/localtime:/etc/localtime

# 實例
docker run -p 3306:3306 --name mysql -v /etc/localtime:/etc/localtime

2. DockerFile

# 方法1
# 添加時區(qū)環(huán)境變量,亞洲,上海
ENV TimeZone=Asia/Shanghai
# 使用軟連接,并且將時區(qū)配置覆蓋/etc/timezone
RUN ln -snf /usr/share/zoneinfo/$TimeZone /etc/localtime && echo $TimeZone > /etc/timezone

# 方法2
# CentOS
RUN echo "Asia/shanghai" > /etc/timezone
# Ubuntu
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

3. docker-compose

#第一種方式(推薦):
environment:
  TZ: Asia/Shanghai
  
#第二種方式:
environment:
  SET_CONTAINER_TIMEZONE=true
  CONTAINER_TIMEZONE=Asia/Shanghai

#第三種方式:
volumes:
  - /etc/timezone:/etc/timezone
  - /etc/localtime:/etc/localtime
  1. 宿主機直接執(zhí)行命令給某個容器同步時間
# 方法1:直接在宿主機操作
docker cp /etc/localtime 【容器ID或者NAME】:/etc/localtime
docker cp -L /usr/share/zoneinfo/Asia/Shanghai 【容器ID或者NAME】:/etc/localtime

# 方法2:登錄容器同步時區(qū)timezone
ln -sf /usr/share/zoneinfo/Asia/Singapore /etc/localtime

注:這種方式在容器中運行的程序的時間不一定能更新過來,比如在容器運行的mysql服務,在更新時間后,通過sql查看mysql的時間

select now() from dual;

可以看到,時間并沒有更改過來 ,這時候必須要重啟mysql服務或者重啟docker容器,mysql才能讀取到更改過后的時間

美文佳句

不知什么時候起,熬夜仿佛成了奮斗的標志。但仔細想想,能拉開人與人差距的往往不是晚睡,而是早起。

有位網友參加了一項“早起30天”的挑戰(zhàn)。他是個普通上班族,以前熬夜加班后白天再繼續(xù)工作,總覺得自己在被任務拖著走,忍不住打瞌睡。開始堅持早睡早起后,犯困成了偶爾的事,工作效率大幅提升。成功避開了地鐵早高峰,他再也不用體會被擁擠人潮推著走的感覺。由于頭腦清醒,他做事更有計劃,在工作時還會不時冒出各種創(chuàng)意。

早起,看似是細微的改變,收獲卻不容小覷。生活還是同樣的生活,忙碌還是同樣的忙碌,但是選擇早睡早起,你就可以抓住了生活的主動權。

你好,我是yltrcc,日常分享技術點滴,歡迎關注我

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容