Post

Docker/Podman 启动 MySQL/PostgreSQL 等数据库容器实战

2026-05-07

使用 Podman/Docker 启动常见数据库容器的完整指南

概述

容器化数据库部署已成为现代开发和运维的标准实践。本文聚焦于使用 Podman 和 Docker 启动 MySQL、PostgreSQL、MongoDB、Redis 等常见数据库容器的完整操作流程,涵盖环境变量配置、卷挂载、端口映射及数据持久化方法。适用于需要快速搭建测试环境或生产数据库服务的场景。


核心概念

容器启动参数解析

参数 作用 示例
-d 后台运行容器 podman run -d
--name 自定义容器名称 --name mysql-container
-e 设置环境变量(如密码、数据库名) -e MYSQL_ROOT_PASSWORD=123456
-v 挂载本地目录实现数据持久化 -v /host/path:/container/path
-p 端口映射(宿主机:容器) -p 3306:3306

注意:Podman 与 Docker 的命令语法高度兼容,但 Podman 默认无需守护进程(无 dockerd),更适合无服务场景。


使用方法

1. 启动数据库容器

MySQL/MariaDB 示例

podman run -d \
  --name mysql-container \
  -e MYSQL_ROOT_PASSWORD=your_password \
  -e MYSQL_DATABASE=testdb \
  -v /data/mysql:/var/lib/mysql \
  -p 3306:3306 \
  mysql:8.0
  • MYSQL_ROOT_PASSWORD:设置 root 用户密码
  • MYSQL_DATABASE:自动创建数据库
  • -v 挂载路径需提前创建(如 /data/mysql

PostgreSQL 示例

podman run -d \
  --name postgres-container \
  -e POSTGRES_PASSWORD=your_password \
  -e POSTGRES_DB=testdb \
  -v /data/postgres:/var/lib/postgresql/data \
  -p 5432:5432 \
  postgres:13
  • POSTGRES_PASSWORD:设置默认用户密码
  • POSTGRES_DB:自动创建数据库

MongoDB 示例

podman run -d \
  --name mongo-container \
  -e MONGO_INITDB_ROOT_USERNAME=admin \
  -e MONGO_INITDB_ROOT_PASSWORD=your_password \
  -v /data/mongo:/data/db \
  -p 27017:27017 \
  mongo:4.4
  • MONGO_INITDB_* 环境变量用于初始化管理员账户

Redis 示例

podman run -d \
  --name redis-container \
  -e REDIS_PASSWORD=your_password \
  -v /data/redis:/data \
  -p 6379:6379 \
  redis:6.2
  • REDIS_PASSWORD:启用密码保护时设置

数据持久化:卷管理

本地目录挂载

podman run -d \
  -v /host/data:/container/data \
  <image>
  • 优点:直接访问宿主机文件系统
  • 缺点:路径需手动创建,跨容器共享不便

命名卷(推荐)

podman volume create myvolume
podman run -d \
  -v myvolume:/container/data \
  <image>
  • 优点:支持多容器共享,独立于文件系统路径
  • 查看卷信息:podman volume ls

注意:命名卷的数据在容器删除后仍保留,需手动清理。


端口映射与访问

数据库 默认端口 映射示例 说明
MySQL 3306 -p 3306:3306 客户端通过 localhost:3306 连接
PostgreSQL 5432 -p 5432:5432 与 MySQL 类似
MongoDB 27017 -p 27017:27017 需注意防火墙规则
Redis 6379 -p 6379:6379 默认无密码保护

冲突处理:若宿主机已有进程占用目标端口,需修改映射(如 -p 3307:3306)或终止占用进程。


日志查看与容器交互

查看日志

podman logs mysql-container
  • 实时查看:podman logs -f mysql-container

进入容器

podman exec -it mysql-container bash
  • MySQL 客户端:mysql -u root -p
  • PostgreSQL 客户端:psql -U postgres

容器管理

停止与删除

podman stop mysql-container
podman rm mysql-container
  • 强制删除:podman rm -f <container>

清理所有停止容器

podman rm $(podman ps -a -q)

高级配置与注意事项

环境变量扩展

  • MySQL 支持 MYSQL_MAX_CONNECTIONS 等参数
  • PostgreSQL 可通过 POSTGRES_SHARED_BUFFERS 调整内存配置

Docker Compose 集成(可选)

若需管理多容器服务,可使用 Docker Compose(Podman 也支持 podman play):

services:
  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: secret
    volumes:
      - ./data:/var/lib/mysql
    ports:
      - "3306:3306"

注意docker-composepodman play 的配置语法略有差异,需注意兼容性。

权限与安全

  • 避免使用 root 用户运行容器(可通过 --user 指定)
  • 敏感信息(如密码)应通过环境变量传递,而非写入 Dockerfile

总结

本文系统讲解了使用 Podman/Docker 启动常见数据库容器的完整流程,重点包括:

  1. 通过 -e 环境变量配置数据库用户和密码
  2. 使用 -v 挂载卷实现数据持久化(推荐命名卷)
  3. 端口映射规则与常见数据库默认端口
  4. 容器日志查看和交互方法
  5. 容器生命周期管理(启动/停止/删除)

适用边界说明:本文基于 Podman 4.x 和 Docker 20.10 测试,部分旧版本参数可能略有差异。对于生产环境,建议结合 docker-composekubernetes 实现更复杂的编排。