Docker 蜂拥而至 'dind' 图片和网络问题

Docker swarm on 'dind' images and networking problems

我正在尝试创建一个基于 'dind' 图像的本地集群环境。下面是环境重建的步骤:

docker network create --attachable --subnet 10.0.0.0/16 tools_network

docker run -d --privileged --name swarm-manager-1 --hostname swarm-manager-1 --network tools_network --ip 10.0.0.3 -p 42421:2375 docker:17.03.1-dind

docker --host localhost:42421 swarm init --advertise-addr 10.0.0.3

docker run -d --privileged --name swarm-worker-1 --hostname swarm-worker-1 --network tools_network --ip 10.0.0.4 -p 42423:2375 docker:17.03.1-dind

docker --host localhost:42423 swarm join --token <swarm-token> 10.0.0.3:2377

之后我添加一个基于 nginx 的代理:

docker run -d --name swarm-proxy --network tools_network -v $(pwd)/temp-proxy:/etc/nginx:ro -p 80:80 nginx:stable-alpine

'temp-proxy' 文件夹中 nginx.conf 的以下内容:

events {
    worker_connections  1024;
}

http {
    upstream swarm {
        server 10.0.0.3;
        server 10.0.0.4;

    }

    server {
        listen          80 default_server;
        listen          [::]:80 default_server;

        location / {
            proxy_pass      http://swarm;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
}

我用于测试目的的服务是由以下人员启动的:

docker --host localhost:42421 service create --name test-web --publish 80:80 yeasy/simple-web

基于 mesh networking documentation,我在此阶段的期望是 curl localhost 将 return 来自已部署服务的结果。但是,我收到 502 Bad Gateway 响应,其中包含来自代理的以下日志消息:

[error] 7#7: *4 connect() failed (111: Connection refused) while connecting to upstream, client: 10.0.0.1, server: , request: "GET / HTTP/1.1", upstream: "http://10.0.0.4:80/", host: "localhost"
[error] 7#7: *4 connect() failed (111: Connection refused) while connecting to upstream, client: 10.0.0.1, server: , request: "GET / HTTP/1.1", upstream: "http://10.0.0.3:80/", host: "localhost"
10.0.0.1 - -  "GET / HTTP/1.1" 502 173 "-" "curl/7.47.0"

从部署到 tools_network 的 docker 容器卷曲的结果相同(连接被拒绝)。

运行 netstat -l 从其中一个群节点内部显示它们不在端口 80 上侦听:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       
tcp        0      0 127.0.0.11:38943        0.0.0.0:*               LISTEN      
tcp        0      0 :::2375                 :::*                    LISTEN      
tcp        0      0 :::2377                 :::*                    LISTEN      
tcp        0      0 :::7946                 :::*                    LISTEN      
udp        0      0 127.0.0.11:35094        0.0.0.0:*                           
udp        0      0 0.0.0.0:4789            0.0.0.0:*                           
udp        0      0 :::7946                 :::*   

问题是:

  1. 是不是我配置有问题?这是什么?

  2. 如果不是,我应该采取什么步骤来找到问题的根源?

经过大量调查后,我发现了问题 this。 Docker 由于缺少模块,dind 图像无法正确初始化,我实际上在容器日志中看到了错误 (docker logs swarm-manager-1),但没有注意它们。

所以我的解决方案是像这样启动群节点:

docker run -d --privileged --name swarm-manager-1 --hostname swarm-manager-1 --network tools_network --ip 10.0.0.3 -p 42421:2375 -v /lib/modules:/lib/modules:ro docker:17.03.1-dind

其中 /lib/modules 映射是缺失的部分。