如何将Postgresql Docker容器与另一个Docker容器连接

时间:2018-02-14 16:58:23

标签: postgresql docker networking docker-compose

我想将mysoft docker容器连接到postgresql docker容器。 但我有一些错误:

ERROR: for mysoft_db_1  Cannot start service db: driver failed programming external connectivity on endpoint mysoft_db_1 (XXX): 
Error starting userland proxy: listen tcp 0.0.0.0:5432: bind: address already in use

ERROR: for db  Cannot start service db: driver failed programming external connectivity on endpoint mysoft_db_1 (XXX): 
Error starting userland proxy: listen tcp 0.0.0.0:5432: bind: address already in use

这是我的docker-compose.yml

version: '2'
services:
  mysoft:
    image: mysoft/mysoft:1.2.3
    ports:
      - "80:8080"  
    environment:
      - DATABASE_URL=postgres://mysoft:PASSWORD@db/mysoft?sslmode=disable
  db:
    image: postgresql
    environment:
      - POSTGRES_USER=mysoft
      - POSTGRES_PASSWORD=PASSWORD
      - POSTGRES_DB=mysoft
    ports:
      - 5432:5432

我想使用另一个已经运行的docker pg服务器连接新的软件,也是一个pg docker服务器,用于更多项目 有可能吗?

2 个答案:

答案 0 :(得分:1)

您应该将links添加到mysoftdocker-compose.yml服务的定义中。然后,您可以从db容器访问mysoft服务。

之后,您的服务定义将如下所示。

mysoft:
  image: mysoft/mysoft:1.2.3
  ports:
    - "80:8080"  
  environment:
    - DATABASE_URL=postgres://mysoft:PASSWORD@db/mysoft?sslmode=disable
  links:
    - db

现在关于绑定错误。可能是你收到它,因为你有一个在端口5432上运行的本地postgresql,或者你已经有一个正在运行的docker容器,其5432端口映射到本地机器。

ports:
  - 5432:5432

用于将端口映射到本地计算机。如果您不需要从中访问容器的数据库,只需将其删除即可。

  

我想使用另一个已经运行的docker pg服务器来连接新的   软件,也是一个pg docker服务器,用于更多项目是否可能?

是的,这是可能的。使用external_links

如果您选择此选项:

  1. db

  2. 中移除links服务和mysoft服务定义中的docker-compose.yml
  3. external_links与正确的容器名称添加到mysoft服务定义。

  4. 根据容器名称和postgresql端口更新DATABASE_URL中的主机和端口。

答案 1 :(得分:0)

您可能想检查一下您是否已在端口5432上运行本地postgres?如果你这样做,你不能做端口5432:5432,但必须将内部端口暴露给另一个外部端口,例如5555:5432

至少如果您使用本机docker(在localhost上运行)...