发布时间:2023-08-18 文章分类:服务器 投稿人:优优 字号: 默认 | | 超大 打印

docker容器自动退出重启报错

docker容器自动退出的原因是什么

为何docker刚启动起来就退出了

是因为 没有一个可以支撑docker 持久运行下去的命令。

退出原因

1、docker容器运行必须有一个前台进程, 如果没有前台进程执行,容器认为空闲,就会自行退出

2、容器运行的命令如果不是那些一直挂起的命令( 运行top,tail、循环等),就是会自动退出

3、这个是 docker 的机制问题

个人遇到的问题

我这里使用的mysql镜像,停止镜像之后输入启动命令发现报错

正确解决办法应该是

docker restart 镜像名

之前的启动命令没有实现交互运行,所以一旦没有前台进程执行,容器认为空闲,就会自行退出,我再次输入启动命令之后出现报错,原因是没有移除容器

输入命令

docker ps -a

发现容器没有移除

先停止容器,然后在移除容器

 docker stop 镜像id
 docker rm 镜像id

移除再次输入docker ps -a 已经移除成功

重新输入启动命令

 docker run --name mysql8.0 -d -it -p 3306:3306 mysql:8.0.21 /bin/bash

启动成功!

docker记录启动容器的报错处理

查看日志

语法:

docker logs 容器ID或容器的名

没报错,启动立马关闭

问题:

1、docker容器运行必须有一个前台进程, 如果没有前台进程执行,容器认为空闲,就会自行退出

2、容器运行的命令如果不是那些一直挂起的命令( 运行top,tail、循环等),就是会自动退出

3、这个是 docker 的机制问题

解决:

1,把刚刚的容器删了:docker rm 容器名或ID

2,docker run -p 6666:80 -dit --name=test nginx

容器里面的配置出错,进不去容器

思路:

cd进行/var/lib/docker,这个文件是docker存的,搜索你要想必的文件,然后修改这个配置

启动成功,外面访问不到

看看是不是防火器的问题:

systemctl stop firewalld.service 停止防火墙
systemctl disable firewalld.service 禁止防火墙开机启动
firewall-cmd --state 检测防火墙是否关闭
systemctl list-unit-files | grep firewalld.service 查看有没有禁止防火墙开机自启 

启动报错1

[root@localhost ~]# docker start mynginx
Error response from daemon: driver failed programming external connectivity on endpoint mynginx (1f5125fc7eddc9b34ce8f8f4417186d4ce1382643b5001fc468d17dd64f34f15): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 8888 -j DNAT --to-destination 172.17.0.2:80 ! -i docker0: iptables: No chain/target/match by that name.

因为在启动docker容器的时候或者做docker配置的时候,还对防火墙设置重新启动等配置,这样会清除docker的相关配置,导致在查询防火墙规则的时候显示不到docker的链。

解决:重启docker

systemctl restart docker

有时候重启没效果可以选择停止docker,在启动

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持本站。