目录
一、进入、退出容器操作
二、查看Docker 容器的配置文件
方法一:进入docker容器内进行查看
方法二:通过数据卷挂载方式查看配置文件
方法三:使用Docker可视化工具查看配置文件
三、容器与宿主机时间同步
方法一:创建启动容器时共享宿主机的localtime
方法二:复制宿主机的localtime
1、宿主机直接执行命令:将时间同步给指定容器
2、登录容器同步时区timezone
方法三:创建DockerFile文件的时候,自定义该镜像的时间格式及时区
一、进入、退出容器操作
1、进入容器
- 首先,通过docker ps命令查看正在运行的容器列表,找到目标容器的 CONTAINER ID 或 NAMES 。
- 使用以下命令进入到容器内部:
docker exec -it <container_id_or_name> /bin/bash
2、退出容器
操作方式 | 描述 |
---|---|
exit | 使用 exit 命令退出容器 |
Ctrl+D | 使用 Ctrl+d 快捷键退出容器 |
二、查看Docker 容器的配置文件
方法一:进入docker容器内进行查看
- 通过 docker exec 命令进入容器内
- 进入容器后,使用ls命令查看容器内的文件和目录结构。
- 根据项目的具体目录结构和配置文件位置,使用cat或vi等命令查看和编辑配置文件
进入容器
docker exec -it <container_id_or_name> /bin/bash查询目录
ls -l
方法二:通过数据卷挂载方式查看配置文件
- 如果配置文件是通过数据卷挂载到容器中的,可以直接通过本地文件系统查看配置文件。
- 使用以下命令查看数据卷挂载情况:
docker inspect <container_id_or_name>
在输出结果中找到Mounts字段,查看挂载的数据卷信息。根据挂载路径,在本地文件系统中找到对应的配置文件。
使用文本编辑器或终端命令查看和编辑配置文件。
方法三:使用Docker可视化工具查看配置文件
除了命令行方式外,也可以使用一些Docker可视化工具来方便地查看Docker项目的配置文件和其他信息。常见的Docker可视化工具有 Portainer、Kitematic 等,通过这些工具可以直观地查看容器中的文件和配置信息。 通过以上方法,我们可以方便地查看Docker项目中的配置文件,以便进行必要的调试和修改操作。
三、容器与宿主机时间同步
问题:如果在启动Docker容器的过程中没有单独配置 localtime,很可能造成 Docker 容器时间与主机时间不一致的情况,比如 UTC 和 CST 相差8小时
通过 date 命令:发现两者之间的时间相差了八个小时!
宿主机采用了CST时区,CST是指(China Shanghai Time,东八区时间)
容器采用了UTC时区,UTC是指(Coordinated Universal Time,标准时间)宿主机查询时间 [root@VM-4-14-centos ~]# date Tue May 21 11:32:36 CST 2024进入容器查询时间 [root@VM-4-14-centos ~]# docker exec -it f77618fa6e0c /bin/bash root@f77618fa6e0c:/data# date Tue May 21 03:33:20 UTC 2024
方法一:创建启动容器时共享宿主机的localtime
创建容器时,挂载localtime文件到容器内
创建容器命令 run 时增加相关参数:-v /etc/localtime:/etc/localtime
创建容器的时候指定启动参数,挂载localtime文件到容器内,保证两者所采用的时区是一致的docker run -d --name <容器ID或者NAME> \
-v /etc/localtime:/etc/localtime \
-p <主机(宿主)端口>:<容器端口> \
<本地镜像仓库下载的镜像名-REPOSITORY>:<需要的版本号-TAG>
例如:下面redis的启动命令
docker run -d --name redis-5.0.14 -p 6379:6379 -v /etc/localtime:/etc/localtime redis:5.0.14
方法二:复制宿主机的localtime
1、宿主机直接执行命令:将时间同步给指定容器
docker cp:用于容器与主机之间的数据拷贝
执行命令(作用相同):
docker cp /etc/localtime <容器ID或者NAME>:/etc/
或
docker cp /usr/share/zoneinfo/Asia/Shanghai <容器ID或者NAME>:/etc/localtime
执行命令
[root@VM-4-14-centos ~]# docker cp /etc/localtime <容器ID或者NAME>:/etc/然后再登陆容器,查看时间,发现已经跟宿主机时间同步了
[root@VM-4-14-centos ~]# docker exec -it <容器ID或者NAME> /bin/bash
root@f3a11c61d13f:/# date
Tue May 21 17:16:46 CST 2024
如果遇到问题:出现下面报错信息
Error response from daemon: Error processing tar file(exit status 1): invalid symlink "/etc/localtime" -> "../usr/share/zoneinfo/Asia/Shanghai"
就更换命令
执行命令
[root@VM-4-14-centos ~]# docker cp /usr/share/zoneinfo/Asia/Shanghai <容器ID或者NAME>:/etc/localtime然后再登陆容器,查看时间,发现已经跟宿主机时间同步了
[root@VM-4-14-centos ~]# docker exec -it <容器ID或者NAME> /bin/bash
root@f3a11c61d13f:/# date
Tue May 21 17:16:46 CST 2024
2、登录容器同步时区timezone
注:这种在容器中运行程序的方式,时间不一定能更新过来,有时需重启容器 docker restart <容器ID或者NAME>
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
方法三:创建DockerFile文件的时候,自定义该镜像的时间格式及时区
在dockerfile文件里添加下面内容
......
FROM tomcat
ENV CATALINA_HOME /usr/local/tomcat
.......
#设置时区
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
保存后,利用 docker build 命令生成镜像使用即可,使用dockerfile创建的镜像的容器改变了容器的时区,
这样不仅保证了容器时间与宿主机时间一致(假如宿主机也是CST),并且像上面使用tomcat作为父镜像的话,JVM的时区也是CST,
这样tomcat的日志信息的时间也是和宿主机一致的,像上面那两种方式只是保证了宿主机时间与容器时间一致,JVM的时区并没有改变,tomcat日志的打印时间依旧是UTC