docker撰写:如何将其他服务引用为localhost

我有两个服务 – 一个是应用程序,另一个是数据库。 这是一个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 

应用程序服务尝试连接到URL jdbc:mysql://localhost/company_db

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

我已经附加到运行应用程序容器,并检查etc/hosts文件,并find下一个内容:

 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组成的最后一项添加是我可以参考数据库容器的IP,我也发现它可以通过company-db域引用。

也正如你所看到的我试图添加主机名选项公司数据库服务,没有成功。

我的问题是我可以通过改变只有组成configuration实现通过相同的本地主机url参考company-db服务的能力?

您可以通过将本地端口映射到容器来实现这一点。 对于你的公司数据库服务写下面的内容

 ports: - 3306:3306 

每个容器都将自己看作本地主机。 Docker使用内部DNS。 所以你可以这样调用你的数据库容器:

JDBC:MySQL的://公司-DB / company_db

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