我已经阅读了几个回答相同问题的SO问题,但由于分数不足,我无法对现有问题发表评论。因此,我必须生成我自己的关于docker-compose和links的问题线程。
我的印象是在docker-compose文件中包含以下内容会添加' db'到我的容器的主机文件
web:
links:
- db
我在想我的网络代码可以建立一个与
一致的数据库连接db := sql.Open("postgres", "user=foo dbname=baz host=db")
其中hostname db 存在于我的Web容器&etc / hostfile中,因此解析为到达db容器的某个地址。
我的网络应用程序没有解析到运行我的数据库的地址,而是解析为一个地址(172.19.0.3),我无法弄清楚它来自何处或如何修复。
docker exec $WEB_CONTAINER_ID 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
172.19.0.2 6f52f9e78f00
我期待看到db的条目。此外:
docker exec $WEB_CONTAINER_ID nslookup db
Name: db
Address 1: 172.19.0.3 apiserver_postgres_1.apiserver_default
我误解了什么?如何启用我的Web代码来解析我的数据库地址?
答案 0 :(得分:2)
这不再是您的经典泊坞窗1.8或更少的“链接”,特别是如果您使用的是docker-compose.yml
文件的第2版。
如issue 3002中所述:
版本:“2”默认为您的项目创建桥接网络。如果您运行
docker network ls
,您将看到一个新的桥接网络,您将在其中创建项目容器。 (这很有意义)Docker本身已从除旧网桥之外的任何网络上的链接中删除了这些变量。
现在有embedded DNS。