docker容器自动退出重启报错问题及解决
作者:于京京9909
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
[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,在启动
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。