连接两个docker容器

时间:2017-09-20 16:12:12

标签: django postgresql docker

我有两个容器,第一个包含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

也是如此

如何连接两台服务器?

2 个答案:

答案 0 :(得分:2)

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

在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

上找到db

在主机上运行两个容器

$ 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

上找到db

连接到主机IP和映射端口

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

$ docker run -d .... django

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

更好的选择是使用docker-compose运行它。详细了解https://docs.docker.com/compose/

答案 1 :(得分:1)

如果您发送了配置文件会更好。但是,我认为你需要使用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