docker - 在 docker-compose 应用程序和其他容器之间在 docker swarm 上创建网络

标签 docker docker-compose docker-swarm docker-networking

所以,假设我有一个部署到 Docker Swarm 的应用程序,它有一个看起来像这样的 compose 文件:

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 容器进行通信。我想我可以像这样在 swarm 上创建一个网络:
$ 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

应用程序可以看到在同一个 compose 文件中定义的服务(如上所示),但它们无法看到除此之外的服务。

如何在同一网络上获取所有应用程序?

编辑 1
我也尝试将撰写文件更改为:
networks:
      - app-network
      - common

networks:
  adapter-network:
    driver: bridge
  common:
    external: true

最佳答案

所以,事实证明我只需要使用 --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

引用撰写文件中的“公共(public)”网络:
networks:
      - app-network
      - common

networks:
  adapter-network:
    driver: bridge
  common:
    external: true

关于docker - 在 docker-compose 应用程序和其他容器之间在 docker swarm 上创建网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40024999/

相关文章:

azure - Docker微服务架构——不同容器之间的通信

wordpress - 无法使用Docker Stack和Official Wordpress Docker镜像访问运行中的服务

Docker M1 - 使用 Ubuntu + MySQL :/bin/sh errors on latest update Docker Desktop 4. 2.0

postgresql - 数据库,用户不是使用 postgres docker-compose 创建的

networking - 在主机之间共享容器ip和端口

php - Docker mysql无法连接到容器

docker - fig docker 监控损坏的容器

c# - 无法在 docker 容器内访问带有 dotnet/angular spa 应用程序的 API,但可以在 docker 容器外访问

docker - 是否可以分配特定节点以使用docker swarm创建容器?

docker - 在 Windows 虚拟机中运行 Docker