之前Drone在云服务器上、服务器快要到期了需要迁移到线下。迁移过程中Docker打包过程遇到了报错。
latest: Pulling from plugins/docker
Digest: sha256:fb41cf8f7df1ff4e62c74e10bf38d9a25a1d28298e6719386a641b1507c935a2
Status: Image is up to date for plugins/docker:latest
+ /usr/local/bin/dockerd --data-root /var/lib/docker --host=unix:///var/run/docker.sock
Unable to reach Docker Daemon after 15 attempts.
Registry credentials or Docker config not provided. Guest mode enabled.
+ /usr/local/bin/docker version
Client:
Version: 20.10.14
API version: 1.41
Go version: go1.16.15
Git commit: a224086
Built: Thu Mar 24 01:45:09 2022
OS/Arch: linux/amd64
Context: default
Experimental: true
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
exit status 1
问题猜测、宿主机Docker版本不一致导致。
执行 rpm -qa|grep docker,之后发现新服务器是docker23、旧云上服务器为docker20。
先将docker进行卸载,再执行 yum install docker-ce-20.10.5 docker-ce-cli-20.10.5 docker-ce-rootless-extras-20.10.6。
降级完后、发现问题还是没有解决。
问题处理、开启Docker构建的Debug日志。
- name: docker
depends_on: [maven,node]
image: plugins/docker
privileged: true
settings:
username:
from_secret: docker_username
password:
from_secret: docker_password
registry: registry.qq.com
repo: registry.qq.com/aa/bb
debug: true
发现这个环节出现了问题。
failed to start daemon: Error initializing network controller: error obtaining controller instance: failed to create NAT chain DOCKER: iptables failed: iptables -t nat -N DOCKER: modprobe: can't change directory to '/lib/modules': No such file or directory
但是将问题的命令[iptables -t nat -N]放到宿主机执行发现没有问题,猜测是容器环境下调用这个命令有问题。先验证一下自己的猜想。
docker run --entrypoint='' -v /var/run/docker.sock:/var/run/docker.sock -it plugins/docker sh
通过以上命令分别的新/旧服务器开启一个拟真的构建环境。再次在容器内部执行[iptables -t nat -N],发现新服务器确认有异常。
才发现新服务器为centos8.5、旧服务器为centos8.2,docker容器一致的apline3.15。找到问题根源了。
查询到资料https://www.cnblogs.com/redcat8850/p/16135814.html
最终通过在新宿主机上执行以下命令解决。
modprobe iptable_nat
modprobe iptable_filter