我想在启动Postgres Docker镜像后创建一个数据库。
问题是,如果我将数据库创建命令放在我的docker-compose文件或子dockerfile中,它会覆盖基本映像的命令以实际启动postgres - 所以我的psql没有启动服务器连接到。 / p>
E.g:
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'
,但这太可怕了。
怎么办?
答案 0 :(得分:3)
我不会这样做。为什么不启动具有所需数据库名称的第二个容器?</ p>
environment:
- PGDATA=/pg
- POSTGRES_PASSWORD=postgres
- POSTGRES_USER=postgres
- POSTGRES_DB=dev
只需为每个数据库运行一个容器..希望这是一个干净的解决方案。