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

Ric*_*ard 1 postgresql docker dockerfile docker-compose

我想在启动 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
Run Code Online (Sandbox Code Playgroud)

并且图像文档没有说明他们运行来启动 Postgres 的确切命令。我尝试将bash -c "postgres && ...命令放在命令的开头,但它失败告诉我无法以 root 身份启动 Postgres。

我能找到的唯一可能的解决方案是放弃 docker-compose 和 dockerfile,转而使用 bash 脚本解决方案,但这docker run postgres:9.6 psql -h postgres -U postgres -c 'create database'太可怕了。

该怎么办?

opH*_*AME 5

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

environment:
  - PGDATA=/pg
  - POSTGRES_PASSWORD=postgres
  - POSTGRES_USER=postgres
  - POSTGRES_DB=dev
Run Code Online (Sandbox Code Playgroud)

只需为每个数据库运行一个容器..我更喜欢将其作为干净的解决方案。