从Docker容器连接到另一个Docker容器的端口

我有两个docker集装箱运行在Linux主机上。

一个带有数据库,另一个带有应用程序。

我怎样才能从容器应用程序连接到容器数据库端口5432?

例如:我启动DATABASE容器,并将端口5432与“-p5432:5432”绑定到主机localhost,但是如何从“应用程序”访问此端口?我无法将端口5432绑定到主机本地主机,因为此端口已被使用。

Docker版本1.12.6

更新

我现在用了

sudo docker network create --subnet=172.20.0.0/16 --gateway=172.20.0.100 --ip-range=172.20.1.0/24 my-network sudo docker run --name postgres --network=my-network --ip=172.20.0.10 -d postgres sudo docker run --name application --network=my-network --ip=172.20.0.15 -d application 

并在应用程序容器中configuration应用程序以查找IP 172.20.0.10

https://docs.docker.com/engine/userguide/networking/work-with-networks/

或者,你可以使用dockernetworking,很容易与docker-compose 。 在我的例子中,你可以从你的app容器指向postgres-container如下所示: postgres-container:5432

泊坞窗,compose.yml:

 version: "3" services: app: image: postgres command: sh -c 'sleep 10; echo \\l | PGPASSWORD=mysecretpassword psql -U postgres -h postgres-container' postgres-container: image: postgres environment: - POSTGRES_PASSWORD=mysecretpassword 

命令:

 docker-compose up 

输出:

 Attaching to postgresql_app_1, postgresql_postgres-container_1 (...) postgres-container_1 | server started (...) app_1 | List of databases app_1 | Name | Owner | Encoding | Collate | Ctype | Access privileges app_1 | -----------+----------+----------+------------+------------+----------------------- app_1 | postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 | app_1 | template0 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres + app_1 | | | | | | postgres=CTc/postgres app_1 | template1 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres + app_1 | | | | | | postgres=CTc/postgres app_1 | (3 rows) app_1 | 
  1. 您可以使用docker链接链接到正在运行的容器…如下所示,并使用别名作为IP地址。 你可以使用docker-compose来做同样的事情。

    $ docker run -d -P –name应用程序–link db-image:db application-image

在你的应用程序中使用'db'作为主机名。

  1. 您也可以将您的主机ip作为db端点应用程序容器。 它会工作。