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

时间:2017-06-05 12:46:10

标签: linux postgresql docker

我在linux主机上运行了两个docker容器。

一个使用DATABASE,另一个使用APPLICATION。

如何从容器APPLICATION连接到容器DATABASE端口5432?

例如: 我启动DATABASE容器并使用" -p5432:5432将端口5432绑定到主机localhost。但是如何从APPLICATION访问此端口?我无法将端口5432绑定到主机localhost,因为此端口现在已经被使用。

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

并在APPLICATION容器中配置app以查找ip 172.20.0.10

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

2 个答案:

答案 0 :(得分:2)

或者您可以使用docker networks,使用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 :(得分:0)

  1. 您可以使用docker链接链接到正在运行的容器...如下所示,并使用别名作为IP地址。你也可以使用docker-compose做同样的事情。

    $ docker run -d -P --name application --link db-image:db application-image

  2. 使用' db'作为应用程序中的主机名。

    1. 您还可以将主机IP作为数据库端点提供给应用程序容器。它会起作用。