一个服务如何使用docker compose,link hostname和ports解析另一个服务的地址?

时间:2016-03-07 05:41:00

标签: postgresql docker hyperlink docker-compose

我已经阅读了几个回答相同问题的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代码来解析我的数据库地址?

1 个答案:

答案 0 :(得分:2)

这不再是您的经典泊坞窗1.8或更少的“链接”,特别是如果您使用的是docker-compose.yml文件的第2版。

issue 3002中所述:

  

版本:“2”默认为您的项目创建桥接网络。如果您运行docker network ls,您将看到一个新的桥接网络,您将在其中创建项目容器。 (这很有意义)

     

Docker本身已从除旧网桥之外的任何网络上的链接中删除了这些变量。

现在有embedded DNS