Docker远程API仅绑定tcp6,IPv4访问异常求助
Docker远程API仅监听tcp6导致外部调用异常的解决方法
问题背景
已配置Docker远程API允许外部访问:
/etc/docker/daemon.json配置:
{ "hosts": ["tcp://0.0.0.0:2375", "unix:///var/run/docker.sock"] }
/etc/systemd/system/docker.service.d/options.conf配置:
[Service] ExecStart= ExecStart=/usr/bin/dockerd
本地执行curl localhost:2375/v1.38/containers/json可正常返回空容器列表[],但通过主机IP10.1.44.11执行curl 10.1.44.11:2375/v1.38/containers/json仅返回空JSON。sudo netstat -ltnp | grep dockerd显示dockerd仅监听tcp6:
tcp6 0 0 :::2375 :::* LISTEN xxx/dockerd
解决步骤
1. 检查IPv6绑定模式
Linux系统中,bindv6only参数决定tcp6监听是否兼容ipv4连接:
- 查看当前值:
cat /proc/sys/net/ipv6/bindv6only - 若返回
1,说明系统仅允许纯ipv6绑定,临时修改为兼容模式:echo 0 | sudo tee /proc/sys/net/ipv6/bindv6only - 永久生效,编辑
/etc/sysctl.conf或/etc/sysctl.d/99-sysctl.conf,添加:net.ipv6.bindv6only = 0 - 执行
sudo sysctl -p应用配置
2. 验证防火墙规则
确保防火墙允许2375端口的外部tcp访问:
- 若使用ufw:
sudo ufw allow 2375/tcp - 若使用iptables:
sudo iptables -A INPUT -p tcp --dport 2375 -j ACCEPT
3. 确认Docker配置生效
检查Docker守护进程的启动参数是否包含指定的hosts:
- 执行:
ps aux | grep dockerd - 若未看到
--host=tcp://0.0.0.0:2375,重新加载systemd并重启Docker:sudo systemctl daemon-reload sudo systemctl restart docker
4. 排查空JSON返回原因
外部请求返回空JSON可能并非监听问题,可尝试:
- 使用匹配Docker版本的API版本(可通过
docker version查看API版本):curl 10.1.44.11:2375/v1.41/containers/json - 查看Docker日志排查请求错误:
sudo journalctl -u docker.service -f
内容的提问来源于stack exchange,提问作者Joseph Adam
相关产品推荐
相关产品推荐

