【问题标题】:docker compose: how to reference other service as localhostdocker compose:如何将其他服务引用为 localhost
【发布时间】:2018-04-29 04:28:55
【问题描述】:

我有两个服务 - 一个是 app,另一个是 db。 这是一个 docker compose 文件的草图:

version: "2"
services:
  company:
    container_name: company-app
    extends:
      file: ../base-config.yml
      service: company
    links:
      - company-db
    env_file: ./company.env
    extra_hosts:
     - "local.company.com:127.0.0.1"

  company-db:
    container_name: company-db
    hostname: localhost
    extends:
      file: ../base-config.yml
      service: company-db
    env_file: ../db.env

应用程序服务尝试连接到 url jdbc:mysql://localhost/company_db 上的数据库

在 docker 容器中运行时会导致 Communications link failure

我已附加到正在运行的应用容器并检查 etc/hosts 文件并找到下一个内容:

root@d1a4391a83f4:/# cat etc/hosts
127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
127.0.0.1   local.company.com
172.18.0.3  d1a4391a83f4

据我所知,docker compose 添加的最后一个条目是我可以引用 db 容器的 ip,我还发现它可以被 company-db 域引用。

正如您所见,我尝试向 company-db 服务添加主机名选项,但没有成功。

我的问题是我能否通过仅更改撰写配置来实现通过相同的本地主机 url 引用 company-db 服务的能力?

【问题讨论】:

    标签: docker docker-compose docker-networking


    【解决方案1】:

    每个容器都将自己视为 localhost。 Docker 使用内部 DNS。所以你可以像这样调用你的数据库容器:

    jdbc:mysql://company-db/company_db

    并删除您的数据库的主机名。

    【讨论】:

    • 问题完全是关于通过 compose 或其他 docker 配置来做到这一点的能力,而不是通过更改应用程序配置来做到这一点
    • 您的数据库与您的应用不在同一台服务器上。因此,您必须更改应用程序的配置。如果你想调用一个远程容器并将其命名为“localhost”,你就犯了一个错误。
    • @FiberOptic 假设很多?我对代理服务器和 webapp 有同样的情况。 webapp 必须通过使用localhost 的外部URL 来引用自己。那是因为 2 个物理服务组成了一个逻辑服务器。
    【解决方案2】:

    你可以使用extra_hosts:

    extra_hosts:
      - localhost:${COMPANY_DB_IP}
    

    缺点是你必须手动设置IP,它可以改变:/

    【讨论】:

      【解决方案3】:

      您可以通过将本地主机端口映射到容器来实现此目的。 为您的公司数据库服务编写以下内容

      ports:
          - 3306:3306
      

      【讨论】:

      • 我不确定在这种情况下映射如何提供帮助。请您详细说明一下吗?
      猜你喜欢
      • 2019-02-18
      • 1970-01-01
      • 2019-04-02
      • 1970-01-01
      • 2020-02-24
      • 2021-09-30
      • 2017-12-17
      • 2022-11-04
      • 1970-01-01
      相关资源
      最近更新 更多