连接两个docker容器

4
我有两个容器,第一个容器是 django,第二个容器是 postgresql
在我的第一个服务器上,我正在运行 django 并尝试将其连接到第二个容器。第二个容器暴露端口 32770 ,但内部运行的是端口号 5432。在我的本地机器上,我使用以下连接信息:
服务器:'Localhost' 端口:32770 用户:'myuser' 密码:''
它可以连接成功,但是使用我的 django 容器时,出现了以下错误:
could not connect to server: Connection refused
    Is the server running on host "localhost" (127.0.0.1) and accepting
    TCP/IP connections on port 32770?

端口5432同样也是如此。
我该如何连接这两个服务器?

你是使用docker-compose还是单独运行容器?请发布你的docker-compose文件或者你所使用的docker run命令。 - Tarun Lalwani
我在单独运行它们 @TarunLalwani - Benjamin RD
2个回答

8

由于您正在单独运行容器,因此有不同的选项

在postgres容器网络中运行django

$ docker run -d ... postgres
<container id>

$ docker run -d ... --net container:<containerid> django

然后django可以在localhost:5432找到postgres

将django和postgres作为命名容器运行

$ docker run --name postgresdb -d ... postgres
<container id>

$ docker run -d ...  django

现在Django可以在postgresdb:5432上找到数据库了。

在主机上运行两个容器

$ docker run --net host -d ... postgres
<container id>

$ docker run -d ... --net host django

那么Django就可以在 localhost:5432 上找到Postgres。

在同一个网络上运行容器

$ docker network create mynet

$ docker run --name postgresdb --net mynet -d ... postgres
<container id>

$ docker run --net mynet -d ...  django

现在Django可以在postgresdb:5432上找到数据库。

连接主机IP和映射端口

$ docker run -d -p 32770:5432 .... postgres

$ docker run -d .... django

Django现在可以连接到<yourdockerhostip>:32770上的数据库。

更好的选择是使用docker-compose运行。了解更多信息,请访问https://docs.docker.com/compose/


很好的答案,提供了许多实现此目标的选项。我运行了一个新的网络,并将两个容器连接到它上面。请注意,如果容器不在同一个网络中,我不确定第二个选项是否可行。 - GavinBelson

2

如果您发送了配置文件会更好,但我认为您需要使用docker-compose。在文档中,您可以找到有关容器之间通信的信息。

简单的配置示例:

system_mysql:
  image: mysql:5.6.27
  container_name: system_mysql
  hostname: system_mysql
  environment:
    - MYSQL_ROOT_PASSWORD=password
    - MYSQL_USER=user
    - MYSQL_PASSWORD=password
    - MYSQL_DATABASE=databse
  ports:
    - "3306:3306"
django:
  restart: always
  container_name: django
  hostname: django
  .
  . continue with [environment, volumes, build]
  .
  depends_on:
    - system_mysql

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接