单个 Docker 容器中的多个 Postgres 数据库
这将是一个简短的。
官方的 Postgres Docker镜像支持一些环境变量。其中之一,POSTGRES_DB,负责保存一个数据库名称。但是,如果您希望您的容器包含多个数据库(例如 app 和 app_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来启动服务。
快乐编码!
更多推荐



所有评论(0)