我找不到在线答案,因此我的问题是:为什么Docker daemon 仅打开IPv6套接字?如何强制它使用双栈套接字或仅IPv4套接字?
# docker version
:
Client:
Version: 17.06.2-ol
API version: 1.30
Go version: go1.8.3
Git commit: d02b7ab
Built: Fri Oct 6 00:02:23 2017
OS/Arch: linux/amd64
Server:
Version: 17.06.2-ol
API version: 1.30 (minimum version 1.12)
Go version: go1.8.3
Git commit: d02b7ab
Built: Fri Oct 6 00:03:48 2017
OS/Arch: linux/amd64
Experimental: false
/etc/sysconfig/docker-network
文件(这是一个Oracle Linux系统):
DOCKER_NETWORK_OPTIONS=-H unix:///var/run/docker.sock -H tcp://0.0.0.0:2376
# sysctl net.ipv6.bindv6only
:
net.ipv6.bindv6only = 0
我尝试在系统范围内设置--ipv6=false
或完全禁用IPv6。仍然,如ss
或netstat
所示,Docker仅打开一个IPv6套接字:
LISTEN 0 128 :::2376 :::* users:(("dockerd",pid=2677,fd=6))
主机上没有侦听相应的IPv4或IPv4映射的IPv6套接字。
使用IPv4地址从其他主机进行的Docker客户端调用不会从服务器获得任何响应,tcpdump
表示守护程序根本不响应它们。如果我使用nc
打开IPv4套接字,则两台主机可以正常通信。
当然可能是导致我的问题的另一个原因,但是现在我想排除这种可能性。有人有什么想法吗?
答案 0 :(得分:0)
不要以为这是Docker问题,如果您授权所有人都没有任何限制或仅使用端口,它将显示为已打开的ipv6端口,但仍可用于ipv4。
这仅意味着打开而不限制端口号...答案比我的要清楚得多:https://unix.stackexchange.com/questions/152612/netstat-why-are-ipv4-daemons-listening-to-ports-listed-only-in-a-inet6