Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 一个服务如何使用docker compose、链接主机名和端口解析另一个服务的地址?_Postgresql_Docker_Hyperlink_Docker Compose - Fatal编程技术网

Postgresql 一个服务如何使用docker compose、链接主机名和端口解析另一个服务的地址?

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存在于

我已经阅读了几个围绕同一个问题的SO问题,但由于分数不足,我无法对现有问题发表评论。因此,我必须生成我自己关于docker compose和链接的问题线程

我的印象是,在docker compose文件中包含以下内容会将“db”添加到容器的hostfile中

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。