Postgresql 一个服务如何使用docker compose、链接主机名和端口解析另一个服务的地址?
我已经阅读了几个围绕同一个问题的SO问题,但由于分数不足,我无法对现有问题发表评论。因此,我必须生成我自己关于docker compose和链接的问题线程 我的印象是,在docker compose文件中包含以下内容会将“db”添加到容器的hostfile中Postgresql 一个服务如何使用docker compose、链接主机名和端口解析另一个服务的地址?,postgresql,docker,hyperlink,docker-compose,Postgresql,Docker,Hyperlink,Docker Compose,我已经阅读了几个围绕同一个问题的SO问题,但由于分数不足,我无法对现有问题发表评论。因此,我必须生成我自己关于docker compose和链接的问题线程 我的印象是,在docker compose文件中包含以下内容会将“db”添加到容器的hostfile中 web: links: - db 我在想,我的web代码可以建立一个db连接,它可以与 db := sql.Open("postgres", "user=foo dbname=baz host=db") 其中主机名db存在于
web:
links:
- db
我在想,我的web代码可以建立一个db连接,它可以与
db := sql.Open("postgres", "user=foo dbname=baz host=db")
其中主机名db存在于web容器的/etc/hostfile中,因此解析为到达db容器的某个地址
我的web应用程序不会解析为数据库运行的地址,而是解析为一个地址(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代码能够解析我的db地址?这不再是经典的docker 1.8或更低版本的“链接”,特别是如果您使用的是
docker compose.yml
文件的版本2
如中所述:
版本:“2”默认情况下为项目创建网桥网络。如果运行docker network ls
,您将看到一个新的桥接网络,将在其中创建项目容器。(这完全有道理)
Docker本身已经从除旧网桥网络之外的任何网络的链接中删除了这些变量
现在有一个。感谢您提供此信息。话虽如此,内容如下:“
--link=CONTAINER\u NAME:ALIAS
在运行容器时使用此选项会为嵌入式DNS提供一个名为ALIAS的额外条目,该条目指向由CONTAINER\u NAME标识的容器的IP地址。当使用--link时,嵌入式DNS将保证仅在使用--link的容器上进行本地化查找。这使得新容器内的进程可以连接到容器,而不必知道其名称或IP。“因此,我的应用程序代码可以通过别名进行连接?确切地说,是DNS。不再是etc/hosts。