Docker大量使用“dind”图片和networking问题

我正在尝试创build一个基于'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; } } } 

我用于testing目的的服务是通过以下方式启动的:

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

我在这个阶段所期望的基于网状networking文档的是curl localhost将返回部署服务的结果。 但是,我得到一个502错误的网关响应,以下来自代理的日志消息:

 [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容器中curl。

从其中一个swarm节点中运行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. 我的configuration有问题吗? 它是什么?

  2. 如果没有,我应该采取什么步骤来解决问题的根源?

经过很多调查,我发现这个问题。 由于缺less模块,Docker内部的Docker图像无法正确初始化,实际上我看到了容器日志( docker logs swarm-manager-1 )中的错误,但没有注意到它们。

所以对我来说,解决scheme就是这样启动swarm节点:

 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映射是不存在的部分。