简体   繁体   English

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

[英]Connect from a Docker container to port of another docker container

I have two docker containers running on a linux host. 我有两个在Linux主机上运行的docker容器。

One with a DATABASE and one with an APPLICATION. 一个带有数据库,另一个带有应用程序。

How can I connect from container APPLICATION to container DATABASE port 5432? 如何从容器APPLICATION连接到容器DATABASE端口5432?

For example: I start DATABASE container and bind port 5432 to hosts localhost with "-p5432:5432. But how can I acces this port from APPLICATION? I cannot bind port 5432 to host localhost because this port is now already used. 例如:我启动DATABASE容器,并使用“ -p5432:5432将端口5432绑定到主机localhost。但是如何从APPLICATION中访问该端口呢?我无法将端口5432绑定到主机localhost,因为该端口现已被使用。

Docker version 1.12.6 Docker版本1.12.6

update 更新

I used now 我现在用

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

and configured app in APPLICATION container to look for ip 172.20.0.10 和配置的应用程序在APPLICATION容器中查找ip 172.20.0.10

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

Alternatively you can use docker networks, easy to achieve with docker-compose . 或者,您可以使用docker-compose轻松实现的docker网络。 In my example you can point from your app container to postgres-container as this: postgres-container:5432 在我的示例中,您可以从app容器指向postgres-container如下所示: postgres-container:5432

docker-compose.yml: docker-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

Command: 命令:

docker-compose up

Output: 输出:

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. You can use docker link to link to running containers ... like below and use alias name as ip address. 您可以使用docker link链接到正在运行的容器...如下所示,并使用别名作为ip地址。 You can do same using docker-compose as well. 您也可以使用docker-compose做同样的事情。

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

use 'db' as host name in your application. 在应用程序中使用“ db”作为主机名。

  1. You can also give your host ip to application container as db end point. 您还可以将主机IP分配给应用程序容器作为db端点。 It will work. 它会工作。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM