douzhuican0041 2018-06-22 07:50
浏览 743

如何使用docker-compose连接到PostgreSQL?

Want to use docker-compose to run api application and postgresql database together.

docker-compose file:

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

Api main.go file:

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

When run the services, got message from log:

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

Does this way not good? host=db in the connection string? Since db is the docker compose service name.


Add

It can work:

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

  • 写回答

1条回答 默认 最新

  • douhanzhuo6905 2018-09-27 19:19
    关注

    In the link you provided there are configuration settings that you did not added

    restart: always
    environment:
      POSTGRES_PASSWORD: example
    

    You should try this

    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
    

    and

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

报告相同问题?

悬赏问题

  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)
  • ¥15 keil里为什么main.c定义的函数在it.c调用不了
  • ¥50 切换TabTip键盘的输入法
  • ¥15 可否在不同线程中调用封装数据库操作的类