同步docker容器中的時間和本地時間一致
背景: 在很多時候, 訓練模型的時候, 記錄的log日志中標記的時間和實際的時間不一致, 往往是容器時間和本地時間不一致照成的.
方案
場景一: 正在運行的容器,可以宿主機直接執行命令給某個容器同步時間
#方法1 直接在宿主機操作
docker cp /etc/localtime 【容器ID或者NAME】:/etc/localtime
docker cp -L /usr/share/zoneinfo/Asia/Shanghai 【容器ID或者NAME】:/etc/localtime#方法2 登錄容器同步時區timezone,一般是因為時區不同導致時間差
ln -sf /usr/share/zoneinfo/Asia/Singapore /etc/localtime
場景二: Dockerfile解決方案
# 方法1
# 添加時區環境變量,亞洲,上海
ENV TimeZone=Asia/Shanghai
# 使用軟連接,并且將時區配置覆蓋/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
場景三:初始化容器時,容器時間與宿主機同步,docker run 添加時間參數
docker run -itd --privileged=true -v /etc/localtime:/etc/localtime:ro
#實例
docker run -itd \-e MYSQL_ROOT_PASSWORD=123456 \-v /home/mysql/data:/var/lib/mysql \-v /home/mysql/log:/var/log/mysql \-v /home/mysql/etc/my.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf \-v /etc/localtime:/etc/localtime:ro \--name mysql-server \--network host \--restart=always \--privileged=true \mysql:5.7.37