2017-02-15 58 views
1

我想在启动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',但这太可怕了。

怎么办?

回答

3

我不会这样做。为什么不启动第二个具有所需数据库名称的容器?

environment: 
    - PGDATA=/pg 
    - POSTGRES_PASSWORD=postgres 
    - POSTGRES_USER=postgres 
    - POSTGRES_DB=dev 

只是为每个数据库运行容器..宁愿这是干净的解决方案。

相关问题