【问题标题】:Docker Compose with Multiple NetworksDocker Compose 与多个网络
【发布时间】:2020-12-28 04:35:24
【问题描述】:

我有一个 docker-compose 文件,它指定了要在两个单独的网络中创建的两个容器:

  1. 一个 mysql 数据库 -- 包含 Adventureworks 数据(属于 adventureworks-db-nw 网络)。
  2. 一个基于 java 的 web 应用程序——它与 mysql 数据库对话以执行 CRUD 操作(属于 adventureworks-app-nw 网络)。
version: '3'
services:
    adventureworks-db:
        image: mysql
        container_name: adventureworks-db
        networks: 
            - adventureworks-db-nw
        ports:
            - 3306:3306
    adventureworks-app:
        container_name: adventureworks-app
        networks: 
            - adventureworks-app-nw
        ports:
            - 8080:8080

networks: 
    adventureworks-db-nw:
        driver: bridge
    adventureworks-app-nw:
        driver: bridge

为简洁起见,我省略了 docker-compose.yml 文件中可能与我的问题无关的某些部分。

如何让属于adventureworks-app-nwadventureworks-app 容器中的java webapp 与属于adventureworks-db-nw 网络的adventureworks-db 容器中的mysql 数据库通信?

请注意,我想将这两个网络作为两个单独的自定义(用户创建)docker 网络保持分离。

【问题讨论】:

  • 为什么应用程序不能和数据库在同一个网络上?
  • @OneCricketeer 他们通常会这样。但在这种特殊情况下,我试图模拟一个非 dockerized 生态系统。该应用程序驻留在一个单独的网络中,MQ(例如,Kafka)由他们自己网络上的某个提供商托管,数据库由他们自己网络上的某个其他提供商托管,等等。我使用容器来表示单个服务通常由不同网络上的不同提供商提供..
  • 在这种情况下,您还需要对路由器/代理进行建模,以允许您在这两个不同的网络之间进行交互。换句话说,something 负责在网络之间路由流量。否则,你会遇到你现在遇到的问题
  • @OneCricketeer 是的,没错。如何在两个 docker 网络之间建模路由器/代理?
  • Traefik 是我知道的一个例子,但让 Java 应用程序存在于数据库网络上而不是改造外部网络基础设施会更容易。

标签: docker docker-compose


【解决方案1】:

如果您希望 java 应用通过其服务名称与 db 容器通信,则必须将“adventureworks-db-nw”网络添加到应用服务。

如果你不想这样做,那么既然你暴露了端口,我想你应该能够通过使用主机 ip/主机名和暴露的端口来连接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多