如何在Postgres Docker容器中创建数据库?
问题描述:
我想在启动Postgres Docker镜像后创建一个数据库。如何在Postgres Docker容器中创建数据库?
问题是如果我把我的数据库创建命令放在我的docker-compose文件或者一个子dockerfile中,它会覆盖基本镜像的命令来真正启动postgres - 所以我的psql没有启动服务器连接到。
例如为:
version: '2'
services:
db:
command: bash -c "su - postgres -c '/usr/lib/postgresql/9.6/bin/psql -h 127.0.0.1 -p 6543 -U postgres -c \"create database dev;\"'"
environment:
- PGDATA=/pg
- POSTGRES_PASSWORD=postgres
- POSTGRES_USER=postgres
image: postgres:9.6
ports:
- '6543:5432'
tmpfs: /pg
而且image documentation不说,他们正在运行的Postgres开始的确切命令。我试着在我的命令开始处放入bash -c "postgres && ...
,但它告诉我我无法以root身份启动Postgres。
我可以找到的唯一可能的解决方案是放弃docker-compose和dockerfile以支持bash脚本解决方案,如docker run postgres:9.6 psql -h postgres -U postgres -c 'create database'
,但这太可怕了。
怎么办?
答
我不会这样做。为什么不启动第二个具有所需数据库名称的容器?
environment:
- PGDATA=/pg
- POSTGRES_PASSWORD=postgres
- POSTGRES_USER=postgres
- POSTGRES_DB=dev
只是为每个数据库运行容器..宁愿这是干净的解决方案。