星空下的回忆 发表于 2023-8-1 17:13:44

docker容器自动退出重启报错问题及解决

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

[*]添加-it 参数交互运行
[*]添加-d 参数后台运行
[*]这样就能启动一个一直停留在后台运行的nginx了

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

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

[*]1: find . -name default.conf
[*]2: vi 查出来的路径 //修改
启动成功,外面访问不到
看看是不是防火器的问题:
systemctl stop firewalld.service 停止防火墙
systemctl disable firewalld.service 禁止防火墙开机启动
firewall-cmd --state 检测防火墙是否关闭
systemctl list-unit-files | grep firewalld.service 查看有没有禁止防火墙开机自启
启动报错1

# docker start mynginxError 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,在启动

总结

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

来源:https://www.jb51.net/server/293376yva.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: docker容器自动退出重启报错问题及解决