如何在Postgres Docker容器中创build数据库?

我想在启动Postgres Docker镜像后创build一个数据库。

问题是如果我把我的数据库创build命令在我的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 

而图像文档并没有说明他们正在运行的启动Postgres的确切命令。 我试着把bash -c "postgres && ...放在我的命令开头,但是它告诉我我不能以root身份启动Postgres。

我唯一可能的解决scheme是放弃docker-compose和dockerfile以支持bash脚本解决scheme,例如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 

只要运行一个容器为每个数据库..会喜欢这个干净的解决scheme。