【问题标题】:How to connect to PostgreSQL using docker-compose?如何使用 docker-compose 连接到 PostgreSQL?
【发布时间】:2018-12-01 15:36:51
【问题描述】:

想用docker-compose一起运行api应用和postgresql数据库。

docker-compose文件:

version: '3'

volumes:
  database_data:
    driver: local

services:
  db:
    image: postgres:latest
    volumes:
      - database_data:/var/lib/postgresql/data

  api:
    build: ./api
    expose:
      - 8080
    ports:
      - 8080:8080
    volumes:
      - ./api:/usr/src/app/
    links:
      - db
    environment:
      - PGHOST=db
      - PGDATABASE=postgres
      - PGUSER=postgres

APImain.go 文件:

func main() {
    db, err = gorm.Open("postgres", "host=db port=5432 user=postgres dbname=postgres")
  // ...
}

运行服务时,从日志中得到消息:

api_1     | [GIN] 2018/06/22 - 07:31:10 | 404 |      1.4404ms |      172.20.0.1 | GET      /posts
api_1     |
api_1     | (sql: database is closed)
api_1     | [2018-06-22 07:31:10]
api_1     |
api_1     | (sql: database is closed)
api_1     | [2018-06-22 07:31:10]
api_1     | [GIN] 2018/06/22 - 07:32:14 | 403 |        15.6µs |      172.20.0.1 | GET      /posts
db_1      | 2018-06-22 07:34:27.296 UTC [81] FATAL:  role "root" does not exist
db_1      | 2018-06-22 07:34:36.897 UTC [90] FATAL:  role "root" does not exist

这样不好吗? host=db 在连接字符串中?由于db 是 docker compose 服务名称。


添加

它可以工作:

https://docs.docker.com/samples/library/postgres/#-or-via-psql

【问题讨论】:

  • 看来你需要为 postgres 公开端口
  • @DominicBarnes 没关系:db_1 | 2018-06-22 08:43:58.702 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432.
  • 您是否尝试添加network_mode: host
  • @mulg0r 没有,怎么添加?
  • 我在这里看到 2 件事:(1) 修复从 db 得到的 FATAL 错误,(2) 确保 api 将在 db 准备好后尝试连接.

标签: postgresql docker go service docker-compose


【解决方案1】:

在您提供的link 中有您没有添加的配置设置

restart: always
environment:
  POSTGRES_PASSWORD: example

你应该试试这个

version: '3'

services:
  db:
    image: postgres:latest
    restart: always
    ports:
      - 5432:5432
    environment:
      POSTGRES_PASSWORD: 'postgres'
    volumes:
      - database_data:/var/lib/postgresql/data

  api:
    build: ./api
    expose:
      - 8080
    ports:
      - 8080:8080
    volumes:
      - ./api:/usr/src/app/
    links:
      - db
    environment:
      - PGHOST: 'db'
      - PGDATABASE: 'postgres'
      - PGUSER: 'postgres'
      - PGPASSWORD: 'postgres'


volumes:
  database_data:
    driver: local

db, err := gorm.Open("postgres", "host=db port=5432 user=postgres dbname=postgres password=postgres")

【讨论】:

    猜你喜欢
    • 2018-06-29
    • 2019-09-28
    • 2017-07-11
    • 1970-01-01
    • 2019-04-22
    • 2018-04-08
    • 2019-04-01
    • 2020-09-19
    • 2020-04-23
    相关资源
    最近更新 更多