这将是一个简短的。

官方的 Postgres Docker镜像支持一些环境变量。其中之一,POSTGRES_DB,负责保存一个数据库名称。但是,如果您希望您的容器包含多个数据库(例如 appapp_test),您必须寻求不同的解决方案。

其中之一是创建一个通过psql命令设置多个数据库的 bash 脚本。 Postgres 将在容器内的数据库启动时执行它。此类脚本的示例create-multiple-postgresql-databases.sh可以在此处找到。感谢 Github 上的 mrts

您可以将它放在您想要的任何项目目录中,尽管pg-init-scripts/可能是一个很好的起点。然后,为了让 Postgres 可见和可执行脚本,它必须挂载到/docker-entrypoint-initdb.d容器目录。

要将主机目录挂载到容器目录,我们必须使用个卷。

语法:<host directory>:<container directory>

警告:您不能将单个文件挂载到目录,它仅适用于目录。

最终docker-compose.yml:

version: "3.7"
services:
  db:
    container_name: "app_db"
    image: "postgres:11.5-alpine"
    volumes:
      - ./pg-init-scripts:/docker-entrypoint-initdb.d
    environment:
      - POSTGRES_USER=${DB_USER}
      - POSTGRES_PASSWORD=${DB_PASSWORD}
      - POSTGRES_MULTIPLE_DATABASES=app,app_test

进入全屏模式 退出全屏模式

${DB_USER}语法意味着DB_USER值是从与docker-compose.yml位于同一目录中的自动加载的.env文件中读取的。

对应.env:

DB_USER=someuser
DB_PASSWORD=somepassword

进入全屏模式 退出全屏模式

请记住,您不应该提交.env个文件!改为使用空秘密值创建并提交.env-example文件。

如果您想使用不同的路径(例如.env-docker),请在docker-compose.yml中定义env_file:

env_file:
  - ./.env-docker

进入全屏模式 退出全屏模式

现在,每个部分都准备好后,运行docker-compose up来启动服务。

快乐编码!

Logo

云原生社区为您提供最前沿的新闻资讯和知识内容

更多推荐