Docker部署PostgreSQL核心是选对镜像与配好参数:必须设POSTGRES_PASSWORD,可选POSTGRES_DB、POSTGRES_USER,需挂载数据卷如-v pg-data:/var/lib/postgresql/data,并支持通过初始化脚本或create-multiple-postgresql-databases.sh实现多库创建。

数据库用 Docker 搭建,核心就两件事:选对镜像 + 配好关键参数。不复杂,但容易忽略持久化和权限细节。
MySQL:环境变量起步最省心
开发或简单测试,直接用官方镜像加环境变量就行,不用碰配置文件。
-
必须设 root 密码:
-e MYSQL_ROOT_PASSWORD=yourpass - 想一启动就有库和用户?加上:
-e MYSQL_DATABASE=myapp、-e MYSQL_USER=app、-e MYSQL_PASSWORD=apppass - 数据别丢——挂载卷:
-v mysql-data:/var/lib/mysql(推荐具名卷,比本地路径更可靠) - 端口映射别漏:
-p 3306:3306
PostgreSQL:类似逻辑,变量名稍不同
PostgreSQL 官方镜像也支持开箱即用的初始化,只是环境变量命名风格不一样。
-
密码是必填项:
-e POSTGRES_PASSWORD=mypass - 初始化数据库:
-e POSTGRES_DB=appdb - 指定管理员用户:
-e POSTGRES_USER=admin - 同样要挂数据卷:
-v pg-data:/var/lib/postgresql/data
需要多库或多用户?靠初始化脚本
官方镜像会在启动时自动执行 /docker-entrypoint-initdb.d/ 下的 .sh 或 .sql 文件。
- 写个
init.sql放进去,就能建表、插初始数据 - 想批量建多个库?用社区脚本如
create-multiple-postgresql-databases.sh,配合POSTGRES_MULTIPLE_DATABASES=users,orders,products环境变量 - 记得把脚本文件挂载进容器:
-v ./init.sql:/docker-entrypoint-initdb.d/init.sql
生产环境必须加的几道保险
跑通不等于跑稳,这几个点直接影响可用性和安全性。
-
重启策略:加
--restart=unless-stopped,避免宿主机重启后数据库掉线 -
资源限制:用
--memory=2g --cpus=2防止单个容器吃光机器资源 -
配置调优:如果默认性能不够,挂载自定义
my.cnf或postgresql.conf,放在/etc/mysql/conf.d/或/var/lib/postgresql/data/下 -
网络隔离:别用默认 bridge 网络,用
docker network create dbnet单独建网,再让应用和服务连进来


















