当使用docker run 命令时,发现容器虽然成功运行,但是输出的时间却不对 。使用timedatectl命令后发现Linux系统的时间是正常的时间。
于是将问题缩小到是不是docker 在运行时没有使用宿主机的时区的原因,那么解决办法可以将宿主机的时区映射到 Docker 容器。可以通过在运行容器时添加 -v /etc/timezone:/etc/timezone -v /etc/localtime:/etc/localtime
来实现
docker run -it --network my-net --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /etc/timezone:/etc/timezone -v /etc/localtime:/etc/localtime mysql
这将挂载宿主机的 /etc/timezone
和 /etc/localtime
文件分别到 MySQL 容器内部相应的路径中,实现时区同步。
说明:
①:如果你要修改MySQL容器的配置,有两个比较常见的方法:
1、使用Dockerfile构建自定义的MySQL镜像
你可以使用Dockerfile来构建自定义的MySQL镜像,然后用这个镜像来启动容器。在Dockerfile中,你可以运行任何你需要的命令来配置MySQL。
首先,创建一个新文件夹用来存放Dockerfile和相关文件,然后在该文件夹中创建Dockerfile文件。Dockerfile文件的内容可以参考下面的示例:
FROM mysql:latest
COPY my.cnf /etc/mysql/my.cnf
CMD ["mysqld"]
注意,这里使用了MySQL官方提供的latest版本作为基础镜像。你可以在该 Dockerfile 中添加其他的需要安装和配置的命令。如果你需要复制其他文件到镜像里,可以通过 COPY
命令来实现。
2、进入正在运行的MySQL容器并进行配置(修改功能有限)
你可以进入正在运行的MySQL容器,然后按照你的需要进行修改。首先,使用以下命令进入正在运行的MySQL容器:
docker exec -it mysql-test bash
然后,打开MySQL并进行修改:
mysql -uroot -p
你需要提供 MySQL 的 root 用户密码才能连接到 MySQL 服务器。连接后,你可以进行所需的删除、添加和修改。请注意,这种方法修改只会影响正在运行的容器。如果你后续启动新的容器,它们将不包含修改。因此,使用这种方法可能需要创建新的自定义镜像来确保容器始终运行所需的配置。
②:但是如果说Linux系统中时区出现了问题,或者说时间也不对的情况,可以通过安装tzdata包来更新时区信息。具体命令为:sudo apt install tzdata
或通过以下命令设置时区:
sudo timedatectl set-timezone <your/timezone>
例如,如果你在中国,可以使用以下命令:
sudo timedatectl set-timezone Asia/Shanghai