【发布时间】: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