You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 18:15:21