当CentOS系统无法访问Docker宿主机时,通常涉及以下几种情况:
# 检查是否能ping通宿主机
ping <宿主机IP>
# 检查端口是否开放
telnet <宿主机IP> <端口号>
# 或
nc -zv <宿主机IP> <端口号>
# 查看防火墙状态
sudo firewall-cmd --state
# 如果防火墙开启,添加允许规则
sudo firewall-cmd --zone=public --add-port=<端口号>/tcp --permanent
sudo firewall-cmd --reload
# 或者临时关闭防火墙测试(不推荐生产环境)
sudo systemctl stop firewalld
# 查看Docker网络
docker network ls
# 检查容器使用的网络模式
docker inspect <容器ID> | grep NetworkMode
# 如果使用bridge模式,确保端口映射正确
docker ps -a # 查看端口映射情况
确保Docker服务监听正确:
# 编辑Docker服务配置
sudo vi /etc/docker/daemon.json
# 添加或修改以下内容(如果文件不存在则新建)
{
"hosts": ["tcp://0.0.0.0:2375", "unix:///var/run/docker.sock"]
}
# 重启Docker服务
sudo systemctl restart docker
# 查看SELinux状态
getenforce
# 如果为Enforcing,可以尝试临时设置为Permissive
sudo setenforce 0
# 永久禁用(不推荐生产环境)
sudo vi /etc/selinux/config
# 修改为 SELINUX=disabled
# 检查IP转发是否开启
cat /proc/sys/net/ipv4/ip_forward
# 如果为0,则开启
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
# 永久生效
sudo vi /etc/sysctl.conf
# 确保有以下内容
net.ipv4.ip_forward = 1
# 然后执行
sudo sysctl -p
如果使用自定义网络:
# 创建自定义网络
docker network create --driver bridge my-bridge-network
# 运行容器时指定网络
docker run --network=my-bridge-network -p <主机端口>:<容器端口> <镜像名>
# 查看Docker日志
journalctl -u docker.service
# 查看系统日志
dmesg | grep docker
通过以上步骤,应该能够解决大多数CentOS无法访问Docker宿主机的问题。如果问题仍然存在,可能需要根据具体错误信息进一步排查。