【发布时间】:2021-07-14 06:43:20
【问题描述】:
当我使用命令在 Docker 中创建卷时:
docker volume create pg-data
然后我从 postgres 图像设置基本的 postgresql 数据库:
docker run --rm -v pg-data:/var/lib/postgresql/data --name pg-docker -e POSTGRES_PASSWORD=docker -p 5433:5432 postgres
一切正常。数据库持久存在,我什至可以直接从主机访问它。我在这里创建了几个角色,例如app_user_1。
然后我想使用 docker-compose 在容器中启动 postgresql。我事先关闭了上面的 postgresql 容器。
我有这个设置:
version: '3.7'
services:
db:
image: postgres
volumes:
- pg-data:/var/lib/postgresql/data/
expose:
- 5432
restart: always
environment:
- POSTGRES_PASSWORD=docker
- POSTGRES_USER=postgres
web:
build: .
volumes:
- ./app:/app
ports:
- 8001:8000
environment:
- ENVIRONMENT=dev
- TESTING=0
depends_on:
- db
volumes:
pg-data:
但是,即使我映射了与docker run 命令中相同的卷并使用相同的环境设置,使用 docker-compose 创建的容器中的 postgresql 实例似乎也没有数据库,也没有任何角色。
我收到以下错误:
psql: error: FATAL: role "postgres" does not exist
或
psql: error: FATAL: role "app_user_1" does not exist
所以看起来它的行为就好像它是 postgresql 的不同实例一样。
当我用docker run 重新启动第一个容器时,一切都在那里(所有数据库和角色)。
知道为什么会这样吗?如何重用 docker-compose 中第一个容器中的数据库?
【问题讨论】:
标签: postgresql docker docker-compose