如何将Docker Web应用程序容器连接到Docker PostgreSQL容器?

我正在练习制作一个与PostgreSQL数据库交互的Golangnetworking应用程序,每个数据库都运行在自己的容器上。

我用docker-compose up运行容器

但我似乎无法正确设置postgres容器。

为了简洁,链接到Dockerfile和其他设置文件在这个要点 (让我知道,如果你想在这里,而不是)。

 version: '2' services: web_app: build: dockerfiles/web_app ports: - "9000:9000" volumes: - .:/go/src/gitlab.com/repo/web_app # links might be replaced by depends_on. # links: # - db depends_on: - db # tty and stdin_open cause docker-compose to disconnect from docker-machine after 60sec. # A fix is on the way. # tty: true # stdin_open: true db: build: dockerfiles/db volumes: - data:/var/lib/postgresql/data volumes: data: {} 

docker-compose up工作正常。 但是,当应用程序试图打开一个数据库连接:

 var pgConf string = "user=web_app dbname=web_app sslmode=verify-full password=password" db, err := sql.Open("postgres", pgConf) 

从docker撰写我得到以下错误:

 Error creating new user: dial tcp [::1]:5432: getsockopt: connection refused 

我能做些什么来使两个容器互相交谈?

先谢谢你。

在使用docker-compose v2时,不需要在服务之间创build链接。 Docker 1.9和1.10允许您通过名称连接到同一个(自定义)networking上的其他容器。

您应该能够使用服务的名称或容器的名称作为主机名进行连接。 鉴于容器的名称是由docker-compose生成的,所以使用起来并不方便,所以docker-compose也会为每个容器添加一个带有服务名称的别名

以这个非常简单的例子。 为了方便起见,我使用了一个Nginx容器,但同样适用于您的情况。

 version: '2' services: web_app: image: nginx db: image: nginx 

首先启动项目(假设;

 $ docker-compose --project-name=test up -d Creating network "test_default" with the default driver Creating test_db_1 Creating test_web_app_1 

然后从test_web_app_1容器中ping“db”服务:

 $ docker exec -it test_web_app_1 ping -c 2 db PING db (172.18.0.2): 56 data bytes 64 bytes from 172.18.0.2: icmp_seq=0 ttl=64 time=0.108 ms 64 bytes from 172.18.0.2: icmp_seq=1 ttl=64 time=0.243 ms --- db ping statistics --- 2 packets transmitted, 2 packets received, 0% packet loss round-trip min/avg/max/stddev = 0.108/0.175/0.243/0.068 ms 

如果您检查test_db_1容器,可以看到test_db_1 -compose为test_db_1容器自动添加了“db”别名;

 $ docker inspect test_db_1 

给出:(只是NetworkSettings.Networks部分)

 "Networks": { "test_default": { "IPAMConfig": null, "Links": null, "Aliases": [ "db", "002b1875e61f" ], "NetworkID": "0f9e2cddeca79e5a46c08294ed61dee273828607f99014f6410bda887626be70", "EndpointID": "a941ab95586a8fdafc5075f9c5c44d745f974e5790ef6048b9e90115a22fb31f", "Gateway": "172.18.0.1", "IPAddress": "172.18.0.2", "IPPrefixLen": 16, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "MacAddress": "02:42:ac:12:00:02" } }