たとえば、Docker Swarm にデプロイされるアプリケーションがあり、次のような構成ファイルがあるとします。
version: '2'
services:
postgres:
image: postgres
environment:
- POSTGRES_PASSWORD=password
networks:
- app-network
volumes:
- postgres:/var/lib/postgresql/data
myapp:
container_name: 'myapp'
image: myapp:debug
depends_on:
- postgres
build:
context: .
dockerfile: Dockerfile.debug
networks:
- app-network
networks:
app-network:
driver: bridge
volumes:
postgres:
これらのアプリケーションのいくつかをデプロイし、rabbitmq コンテナーを介して通信したいと思うかもしれません。次のように群れにネットワークを作成できると思いました:
$ docker network create -d overlay common-network
次に、rabbitmq インスタンスを次のようにプロビジョニングできます。
$ docker run -d \
--hostname rabbit \
--name rabbit \
-e RABBITMQ_ERLANG_COOKIE='bleh' \
-e RABBITMQ_DEFAULT_USER='rabbitmq' \
-e RABBITMQ_DEFAULT_PASS='rabbitmq' \
-e RABBITMQ_DEFAULT_VHOST='/' \
rabbitmq:3
次に、アプリケーションをデプロイします。
$ docker-compose up
しかし、アプリケーションが「rabbit」に到達できるようには見えません。
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
176e455e8215 common overlay global
8f1b14690f2b swarm-agent-40001BF7000000/bridge bridge local
3cfaae53a0dc swarm-agent-40001BF7000000/host host local
a01b27b94fcc swarm-agent-40001BF7000000/none null local
aa6f5b56a6d3 swarm-agent-40001BF7000000/publish_app-network bridge local
アプリケーションは、(上記のように) 同じ構成ファイルで定義されているサービスを認識できますが、それ以外のサービスを認識できません。
すべてのアプリケーションを同じネットワーク上で取得するにはどうすればよいですか?
EDIT 1 私はまた、構成ファイルをこれに変更しようとしました:
networks:
- app-network
- common
networks:
adapter-network:
driver: bridge
common:
external: true