postgresql - 如何使用 docker-compose 连接到 PostgreSQL?
问题描述
想用来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
解决方案
在您提供的链接中有您未添加的配置设置
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")
推荐阅读
- c - CMake:对于每个源文件一个可执行文件
- enterprise-architect - Archimate - 应用层 - 接口 + 数据库
- python - 关于切片数组覆盖python中的字典赋值的问题
- vba - 我怎样才能扭转这个偏移属性?
- regex - 正则表达式用 C++ for 循环替换 Q_FOREACH
- sql-server - SSRS - 现有连接被远程主机强行关闭
- angular - Angular 4 中的 jsPDF 设置在新的 jsPDF() 上失败
- perl - Perl:分叉 WSS 连接会导致在子退出时关闭套接字(WS 不会发生)
- css-selectors - 使用 Puppeteer 选择名称中带有点或句号的节点
- c# - tesseract 无法启动俄语