如何将Docker容器连接到远程Postgresql

时间:2018-10-29 10:40:22

标签: postgresql docker docker-compose

我能够成功将servicebot服务连接到在docker容器中运行的postgresql,但我想将servicebot连接到实例中运行的postgresql,即不在docker容器中。

我已经成功安装了postgresql。我已经在docker-compose.yml中将与postgrsql相关的环境变量设置为以下行。如何使docker-compose.yml连接到

docker-compose.yml

version: '2'
services:
  servicebot:
    image: servicebot/servicebot
    environment:
      POSTGRES_DB_PORT : "5432"
      POSTGRES_DB_HOST : "localhost"
      POSTGRES_DB_USER : "servicebot_user"
      POSTGRES_DB_PASSWORD : "servicebot_pass"
      POSTGRES_DB_NAME : "servicebot_user"
      PORT : "3000"
    volumes:
      - upload-data:/usr/src/app/uploads
      - environment-file:/usr/src/app/env
      - db-data:/var/lib/postgresql/data
#    links:
#      - db
    ports:
      - "80:3000"
      - "443:3001"
    command: ["sh", "-c", "node /usr/src/app/bin/wait-for-it.js db 5432  && npm run-script start"]

volumes:
  upload-data:
  environment-file:
  db-data:

以前,我有一个名为db的postgresql服务,并通过链接连接到它,如您所见,我已经对此进行了注释。

我对Postgresql非常陌生,无法找出正确的方法。我尝试了几种方法,但没有成功。

尝试过:

  • 在实例中向IP添加extra_hosts

  • 添加host.docker.internal而不是localhost

错误日志:

  

docker logs servicename上不显示任何内容。服务   在29 30秒后停止。

3 个答案:

答案 0 :(得分:1)

您的问题是POSTGRES_DB_HOST指向“本地主机”,因为“本地主机”将是运行当前服务的容器。

如果您想连接到在主机(localhost)中运行的postgre,我想您可以使用此特殊值host.docker.internal

答案 1 :(得分:0)

请注意,如果您在 MAC (macOS) 上运行 Docker,则需要使用:docker.for.mac.host.internal

答案 2 :(得分:0)

我认为您应该将有关 postgresql 的更多信息添加到 docker-compose.yml 文件中,如下所示:

version: '2'
services:
  db:
    image: postgres:13
    environment:
      - POSTGRES_PASSWORD=servicebot_pass
      - POSTGRES_USER=servicebot_user
      - POSTGRES_DB=postgres
    restart: always
    volumes:
        - ./postgresql:/var/lib/postgresql/data

  servicebot:
    image: servicebot/servicebot
    depends_on:
      - db
    environment:
      POSTGRES_DB_PORT : "5432"
      POSTGRES_DB_HOST : "localhost"
      POSTGRES_DB_USER : "servicebot_user"
      POSTGRES_DB_PASSWORD : "servicebot_pass"
      POSTGRES_DB_NAME : "servicebot_user"
      PORT : "3000"
    volumes:
      - upload-data:/usr/src/app/uploads
      - environment-file:/usr/src/app/env
      - db-data:/var/lib/postgresql/data
#    links:
#      - db
    ports:
      - "80:3000"
      - "443:3001"
    command: ["sh", "-c", "node /usr/src/app/bin/wait-for-it.js db 5432  && npm run-script start"]

volumes:
  upload-data:
  environment-file:
  db-data: