Docker蜂拥着'dind'图像和网络问题

时间:2017-06-04 10:21:36

标签: docker docker-swarm

我正在尝试基于'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将从已部署的服务返回结果。但是,我收到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. 如果没有,我应该采取哪些步骤来解决问题的根源?

1 个答案:

答案 0 :(得分:0)

经过大量调查后,我发现问题在于this。  由于缺少模块,内部图像中的Docker无法正常初始化,我实际上看到了容器日志中的错误(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映射是缺少的部分。