我有两个服务 - 一个是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
服务的能力吗?
答案 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,并且可以更改:/