Docker swarm 和服务发现
Docker swarm and service discovery
我正在从 docker-compose 文件转向使用 docker swarm,但我就是想不通。
我有两个服务 - 一个 nginx 代理和一个网站 运行 在 docker swarm(有三个节点)
中都很好
我遇到的问题是我需要将 nginx 配置为 proxy_pass 到后端网站。目前我能让它工作的唯一方法是指定其中一个节点的 IP 地址。
我的服务创建如下:
docker service create --mount type=bind,source=/../nginx.conf,target=/etc/nginx/conf.d/default.conf \
-p 443:443 \
--name nginx \
nginx
和
docker service create --name ynab \
-p 5000:5000 \
--replicas 2 \
scottrobertson/fintech-to-ynab
我试过使用服务名称,但那行不通。
真的,我认为我什至不必公开 ynab 服务端口(至少在我使用 docker-compose 时会起作用)
在其中一个 nginx 容器中,我尝试了以下操作:
root@5fabc5611264:/# curl http://ynab:5000/ping
curl: (6) Could not resolve host: ynab
root@5fabc5611264:/# curl http://nginx:5000/ping
curl: (6) Could not resolve host: nginx
root@5fabc5611264:/# curl http://127.0.0.1:5000/ping
curl: (7) Failed to connect to 127.0.0.1 port 5000: Connection refused
root@5fabc5611264:/# curl http://localhost:5000/ping
curl: (7) Failed to connect to localhost port 5000: Connection refused
使用进程列表我尝试连接到 运行 实例 ID 和名称:
root@5fabc5611264:/# curl http://ynab.1:5000/ping
curl: (6) Could not resolve host: ynab.1
root@5fabc5611264:/# curl http://pj0ekc6i7n0v:5000/ping
curl: (6) Could not resolve host: pj0ekc6i7n0v
但我只有使用节点 public 的 ip 地址才能让它工作:
root@5fabc5611264:/# curl http://192.168.1.52:5000/ping
pong
root@5fabc5611264:/# curl http://192.168.1.53:5000/ping
pong
root@5fabc5611264:/# curl http://192.168.1.51:5000/ping
pong
我真的不想使用 public ip 以防节点出现故障。我确定我一定是做错了什么!
这些服务需要连接到同一网络才能正常工作。
$ docker network create -d overlay fake-internet-points
$ docker service create --name service_one --network fake-internet-points [...]
$ docker service create --name service_two --network fake-internet-points [...]
我正在从 docker-compose 文件转向使用 docker swarm,但我就是想不通。
我有两个服务 - 一个 nginx 代理和一个网站 运行 在 docker swarm(有三个节点)
中都很好我遇到的问题是我需要将 nginx 配置为 proxy_pass 到后端网站。目前我能让它工作的唯一方法是指定其中一个节点的 IP 地址。
我的服务创建如下:
docker service create --mount type=bind,source=/../nginx.conf,target=/etc/nginx/conf.d/default.conf \
-p 443:443 \
--name nginx \
nginx
和
docker service create --name ynab \
-p 5000:5000 \
--replicas 2 \
scottrobertson/fintech-to-ynab
我试过使用服务名称,但那行不通。
真的,我认为我什至不必公开 ynab 服务端口(至少在我使用 docker-compose 时会起作用)
在其中一个 nginx 容器中,我尝试了以下操作:
root@5fabc5611264:/# curl http://ynab:5000/ping
curl: (6) Could not resolve host: ynab
root@5fabc5611264:/# curl http://nginx:5000/ping
curl: (6) Could not resolve host: nginx
root@5fabc5611264:/# curl http://127.0.0.1:5000/ping
curl: (7) Failed to connect to 127.0.0.1 port 5000: Connection refused
root@5fabc5611264:/# curl http://localhost:5000/ping
curl: (7) Failed to connect to localhost port 5000: Connection refused
使用进程列表我尝试连接到 运行 实例 ID 和名称:
root@5fabc5611264:/# curl http://ynab.1:5000/ping
curl: (6) Could not resolve host: ynab.1
root@5fabc5611264:/# curl http://pj0ekc6i7n0v:5000/ping
curl: (6) Could not resolve host: pj0ekc6i7n0v
但我只有使用节点 public 的 ip 地址才能让它工作:
root@5fabc5611264:/# curl http://192.168.1.52:5000/ping
pong
root@5fabc5611264:/# curl http://192.168.1.53:5000/ping
pong
root@5fabc5611264:/# curl http://192.168.1.51:5000/ping
pong
我真的不想使用 public ip 以防节点出现故障。我确定我一定是做错了什么!
这些服务需要连接到同一网络才能正常工作。
$ docker network create -d overlay fake-internet-points
$ docker service create --name service_one --network fake-internet-points [...]
$ docker service create --name service_two --network fake-internet-points [...]