docker堆栈在容器之间进行通信

我正在尝试使用docker设置一个swarm,但是我在容器之间进行通信时遇到了问题。 我有5个节点的群集。 1名经理和4名工人。

3个应用程序:redis,splash,myapp

myapp必须在4名工人身上

redis,只是在经理身上飞溅

myapp必须能够与redis和splash进行通信

我尝试使用容器名称,但它不工作。 它将容器名称parsing为不同的IP。

ping splash # return a different ip than the container actually has

我正在部署使用docker stack运行swarm

docker stack deploy -c docker-stack.yml myapp

连接它们之间的容器也不起作用。 有任何想法吗 ? 我错过了什么吗?

 root@swarm-manager:~# docker version Client: Version: 17.09.0-ce API version: 1.32 Go version: go1.8.3 Git commit: afdb6d4 Built: Tue Sep 26 22:42:18 2017 OS/Arch: linux/amd64 Server: Version: 17.09.0-ce API version: 1.32 (minimum version 1.12) Go version: go1.8.3 Git commit: afdb6d4 Built: Tue Sep 26 22:40:56 2017 OS/Arch: linux/amd64 Experimental: false 

docker-stack.yml包含:

 version: "3" services: splash: container_name: splash image: scrapinghub/splash ports: - 8050:8050 - 5023:5023 deploy: mode: global placement: constraints: - node.role == manager redis: container_name: redis image: redis ports: - 6379:6379 deploy: mode: global placement: constraints: - node.role == manager myapp: container_name: myapp image: myapp_image:latest environment: REDIS_ENDPOINT: redis:6379 SPLASH_ENDPOINT: splash:8050 deploy: mode: global placement: constraints: - node.role == worker entrypoint: - ping google.com 

—-编辑—-

我也试过curl。 没有工作。 docker stack deploy -c docker-stack.yml myapp

 Creating network myapp_default Creating service myapp_splash Creating service myapp_redis Creating service myapp_myapp 

curl http://myapp_splash:8050

curl: (7) Failed to connect to myapp_splash port 8050: No route to host

curl http://splash:8050

curl: (7) Failed to connect to splash port 8050: No route to host

什么工作得到的实际容器名称的飞溅,这是一些随机生成的string。

curl http://myapp_splash.d7bn0dpei9ijpba4q41vpl4zz.tuk1cimht99at9g0au8vj9lkz:8050

但这并不能真正帮助我。

Ping不是尝试连接服务的适当工具。 由于某些原因,它不适用于dockernetworking。 尝试curl http:// serviceName来代替。

除此之外:使用堆栈部署时不能命名容器,而是使用您的服务名称(这恰好相同)来访问另一个服务。

我设法让它使用curl http://tasks.splash:8050http://tasks.myapp_splash:8050

我不知道这是什么原因导致这个问题。 随意评论一个答案。