docker compose:如何引用其他服务作为localhost

时间:2017-11-15 19:46:28

标签: docker docker-compose docker-networking

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

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

应用服务尝试连接到网址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服务添加hostname选项,但没有成功。

我的问题是,我可以通过更改compose配置实现通过相同localhost网址引用company-db服务的能力吗?

3 个答案:

答案 0 :(得分:0)

您可以通过将localhost端口映射到容器来实现此目的。 对于您的company-db服务,请写下以下内容

return

答案 1 :(得分:0)

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

  

JDBC:MySQL的://公司分贝/ company_db

删除数据库的主机名。

答案 2 :(得分:0)

您可以使用extra_hosts

extra_hosts:
  - localhost:${COMPANY_DB_IP}

缺点是您必须手动设置IP,并且可以更改:/