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

时间:2017-02-15 14:50:18

标签: postgresql docker docker-compose dockerfile

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

怎么办?

1 个答案:

答案 0 :(得分:3)

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

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

只需为每个数据库运行一个容器..希望这是一个干净的解决方案。