我正在尝试基于'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 :::*
我的配置有问题吗?它是什么?
如果没有,我应该采取哪些步骤来解决问题的根源?
答案 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
映射是缺少的部分。