所以,假设我有一个部署到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
但是,它看起来不像应用程序可以达到“兔子”。
$ 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
应用程序可以看到在同一个撰写文件中定义的服务(如上所示),但是它们看不到其他服务。
如何在同一网络上获取所有应用程序?
编辑1 我也尝试将compose文件更改为:
networks:
- app-network
- common
networks:
adapter-network:
driver: bridge
common:
external: true
答案 0 :(得分:0)
因此,事实证明我只需要使用--net参数创建rabbitmq服务:
docker run -d \
--hostname rabbit \
--name rabbit \
--net common \
-e RABBITMQ_ERLANG_COOKIE='blah' \
-e RABBITMQ_DEFAULT_USER='rabbitmq' \
-e RABBITMQ_DEFAULT_PASS='rabbitmq' \
-e RABBITMQ_DEFAULT_VHOST='/' \
rabbitmq:3
在撰写文件中引用“常用”网络:
networks:
- app-network
- common
networks:
adapter-network:
driver: bridge
common:
external: true