Docker问题参考手册

在使用Docker时会遇到各种各样问题,下面为日常积累的一些经典问题,值得借鉴!该文章不定期更新维护,分享新的问题及解决方案!

一、IDEA远程连接Docker

1.1 修改配置文件

[root@MyDB1 ~]# vi /lib/systemd/system/docker.service

在这里插入图片描述

注释:

​ (1)0.0.0.0——表示任何ip地址都可以远程访问

​ (2)默认2375端口,最好修改为不常用的端口,提高安全性

​ (3)ip地址和端口,根据实际情况修改。可以修改为,只有指定ip才能够远程访问本Docker服务!

1.2 重启Docker服务

[root@MyDB1 ~]# systemctl daemon-reload 					# 刷新守护进程
[root@MyDB1 ~]# systemctl restart docker					# 重启服务
[root@MyDB1 ~]# systemctl status docker						# 查看服务状态

在这里插入图片描述

注释:从图中可以看到,增加了一个远程访问的守护进程(PID=8395),并实时监听2375端口!

1.3 配置防火墙

[root@MyDB1 ~]# systemctl stop firewalld.service

注释:可以选择关闭防火墙,或者开放“2375”端口。此处只是测试环境,选择直接关闭!

1.4 配置IDEA连接

在这里插入图片描述

注释:IP为Docker服务所在服务器的地址,端口为上述配置文件中指定的端口!

二、启动容器失败

2.1 错误日志

docker: Error response from daemon: driver failed programming external connectivity on endpoint lamp3 (46b7917c940f7358948e55ec2df69a4dec2c6c7071b002bd374e8dbf0d40022c): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 86 -j DNAT --to-destination 172.17.0.2:80 ! -i docker0: iptables: No chain/target/match by that name.

2.2 原因分析

可能是通过非官方提供的操作,从而误删除容器;因删除不彻底,守护进程的iptables规则链失效,启动时根据该规则链找不到相应容器!

2.3 解决方案

重启Docker服务!

systemctl restart docker

三、删除镜像失败

3.1 错误日志

在这里插入图片描述

3.2 原因分析

该镜像已被容器引用,无法直接删除!

3.3 解决方案

要想删除该镜像,先删除引用该镜像的所有容器,而后再删除镜像!

docker rm -f 容器名
docker rmi 镜像名

四、清空容器日志

4.1 问题描述

  • 容器在运行过程中,随着请求不断,日志文件也不断扩大;

  • Docker服务会在日志文件达到一定阀值时,会自动清理;

  • 而随着容器数量的递增,所有日志文件累加起来也不容小觑,而且我们查看一个容器日志也是从头一直刷到最新时刻,很痛苦!

4.2 解决分析

  • 为了解决上述问题,我们手动清空一下日志;

  • 日志文件默认存储路径:/var/lib/docker/containers/容器ID/容器ID-json.log;

  • 思路分析:根据容器名称找到相应的容器id,然后进入对应容器存储路径,删除日志内容;

4.3 解决方案

方案1:(清空指定容器日志)

docker ps -a
cd /var/lib/docker/containers/
ls|grep dd2e4bedfb1e
cd dd2e4bedfb1eebe6d58807207e98bcf00947c3e5615e887bc6371449036a4581
echo > dd2e4bedfb1eebe6d58807207e98bcf00947c3e5615e887bc6371449036a4581-json.log
docker logs -f test-mysql

在这里插入图片描述

方案2:(清空所有容器日志)

cd /var/lib/docker/containers/
for i in `find . -name "*.log"`; do cat /dev/null >$i; done

五、删除无效镜像

5.1 问题描述

当我们重新构建镜像时,旧的镜像就会标记为<none>这个种名称;如何清理这种无效镜像呢?

[root@MyDB1 ~]# docker images|grep '<none>'

在这里插入图片描述

5.2 解决方案

[root@MyDB1 ~]# docker rmi $(docker images -f "dangling=true" -q)

六、清理磁盘空间

6.1 需求描述

因磁盘有限,需清理一些长时间不使用的镜像或容器

6.2 解决方案

[root@MyDB1 ~]# docker image prune -a -f					# 删除未引用的镜像
[root@MyDB1 ~]# docker container prune -f					# 删除未运行的容器

注:可能会误删除近期未运行,但是需要保留的容器!谨慎操作!

七、启动服务报错

7.1 问题描述

  • 首次部署项目时,使用docker-copmose来构建镜像并启动服务
  • 再次部署项目时,无需重新部署所有服务,所以选择手动单独构建某一个服务镜像,但在启动时报错,提示找不到其他依赖服务

7.2 原因分析

  • 手动单独构建时,该容器加入默认的内部网络
  • docker-copmose构建时,会自动创建一个新的内部网络,docker-copmose.yml文件中所有容器都会加入该网络
  • 而默认网络和copmose创建的网络是不互通的,所以才会出现此问题
[root@MyDB1 ~]# docker network ls

在这里插入图片描述

7.3 解决方案

在我们启动容器时,加入指定的网络中!

docker run --restart=always -d --name test-service --network test_defalut test-service:1.0

参数选项:

--restart=always							# 该容器随Docker服务启动而启动
-d                    						# 后台运行
--name test-service   						# 容器名称
--network test_defalut						# copmose创建的网络
test-service:1.0      						# 镜像名称
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值