常见的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问题,多试几次或过几天再试也许就好了
Copyright © www.sqlfans.cn 2024 All Right Reserved更新时间: 2024-06-13 21:51:14

results matching ""

    No results matching ""