常见的docker使用问题
[TOC]
场景1:机器重启之后容器丢失
- 症状:重启机器后容器丢失,下面是启动命令
docker run -d --rm --name xxx -v /data:/data --network=host -w=/data fiscoorg/fiscobcos:v2.7.2 -c config.ini
- 原因:--rm 表示退出容器时会自动将其删除,一旦重启docker服务或者重启机器,就会导致容器丢失
- 解决:去掉 --rm 参数,把 -d --rm 换成 -itd
场景2:启动容器报错 permission denied
- 症状:在麒麟v10 SP3 x86_64机器上执行
docker run
启动容器报错 permission denied
错误日志1:failed to create shim task: OCI runtime create failed: container_linux.go:318: starting container process caused "permission denied": unkown.
错误日志2:OpenBLAS blas_thread_init: pthread_create failed for thread 1 of 8: Operation not permitted
- 解决:确认已禁用 selinux 仍错误依旧,解决办法是在
docker run
之后紧跟添加--privileged=true
(顺序有要求) 对容器中的root用户进行提权,使其拥有对宿主机的root操作权限
场景3:执行 iptables -F 之后docker容器异常
故障上报
- 2022.09.14.执行 iptables -F 之后导致启动docker任务失败
- 2022.06.16.执行 iptables -F 会清除所有链条的iptable策略,会造成ip转发失败,别的机器无法telnet
[root@u-146110-iot ~]# docker start aca8e76f91a1
Error response from daemon: driver failed programming external connectivity on endpoint shopxx-b2b2c-application (2d0fbafc14dd571008bac70273c636394436b4ed7b8c6f2a0455f6a84b63799a): (iptables failed: iptables --wait -t filter -A DOCKER ! -i docker0 -o docker0 -p tcp -d 172.17.0.2 --dport 80 -j ACCEPT: iptables: No chain/target/match by that name.
(exit status 1))
Error: failed to start containers: aca8e76f91a1
发生原因
- docker-proxy 在 v1.7 之后全部依赖于iptables,docker转发实际上是在iptables上创建了一个转发规则,然后根据这个转发规则来进行转发,不可 iptables -F 清除所有链条的规则(包括docker链条也会被清除)
解决办法
- 先重启docker服务,再启动docker容器
systemctl restart docker
docker start <容器id>
场景4:容器活着但telnet端口不通
- 症状:利用docker创建的mysql容器,本机可以telnet 3306端口,而别的机器则telnet不通该端口
- 解决:执行
docker restart mysql57
重启容器无效,最后systemctl restart docker
重启docker服务就好了
场景5:Docker: error pulling image configuration: download failed
故障上报
- 2022.06.13.拉取nginx或其他镜像提示报错 error pulling image configuration: download failed after attempts=6
[root@localhost]# docker pull nginx:latest
latest: Pulling from library/nginx
......
error pulling image configuration: download failed after attempts=6: dial tcp 103.252.115.169:443: i/o timeout
解决办法
- 调整为阿里云公共dns服务器并重试,排除解析问题,
echo "nameserver 223.5.5.5" > /etc/resolv.conf
- 大概率是镜像源问题,docker hub在国外,时常出现访问timeout问题,多试几次或过几天再试也许就好了