Docker(四)容器相关操作及问题处理

目录

一、进入、退出容器操作

二、查看Docker 容器的配置文件

方法一:进入docker容器内进行查看

方法二:通过数据卷挂载方式查看配置文件

方法三:使用Docker可视化工具查看配置文件

三、容器与宿主机时间同步

方法一:创建启动容器时共享宿主机的localtime

方法二:复制宿主机的localtime

1、宿主机直接执行命令:将时间同步给指定容器

2、登录容器同步时区timezone

方法三:创建DockerFile文件的时候,自定义该镜像的时间格式及时区


一、进入、退出容器操作

1、进入容器

  1. 首先,通过docker ps命令查看正在运行的容器列表,找到目标容器的 CONTAINER ID 或 NAMES 
  2. 使用以下命令进入到容器内部:
docker exec -it <container_id_or_name> /bin/bash

2、退出容器

操作方式描述
exit使用 exit 命令退出容器
Ctrl+D使用 Ctrl+d 快捷键退出容器

二、查看Docker 容器的配置文件

方法一:进入docker容器内进行查看

  1. 通过 docker exec 命令进入容器内 
  2. 进入容器后,使用ls命令查看容器内的文件和目录结构。
  3. 根据项目的具体目录结构和配置文件位置,使用catvi等命令查看和编辑配置文件
进入容器
docker exec -it <container_id_or_name> /bin/bash

查询目录
ls -l

方法二:通过数据卷挂载方式查看配置文件

  1. 如果配置文件是通过数据卷挂载到容器中的,可以直接通过本地文件系统查看配置文件。
  2. 使用以下命令查看数据卷挂载情况:
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

  • 23
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值