Docker守护程序套接字配置

时间:2018-09-06 11:17:30

标签: linux sockets docker ipv6 ipv4

我找不到在线答案,因此我的问题是:为什么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。仍然,如ssnetstat所示,Docker仅打开一个IPv6套接字:

LISTEN 0 128 :::2376 :::* users:(("dockerd",pid=2677,fd=6))

主机上没有侦听相应的IPv4或IPv4映射的IPv6套接字。

使用IPv4地址从其他主机进行的Docker客户端调用不会从服务器获得任何响应,tcpdump表示守护程序根本不响应它们。如果我使用nc打开IPv4套接字,则两台主机可以正常通信。

当然可能是导致我的问题的另一个原因,但是现在我想排除这种可能性。有人有什么想法吗?

1 个答案:

答案 0 :(得分:0)

不要以为这是Docker问题,如果您授权所有人都没有任何限制或仅使用端口,它将显示为已打开的ipv6端口,但仍可用于ipv4。

这仅意味着打开而不限制端口号...答案比我的要清楚得多:https://unix.stackexchange.com/questions/152612/netstat-why-are-ipv4-daemons-listening-to-ports-listed-only-in-a-inet6