Docker容器启动Redis设置密码、MongoDB设置账号密码并持久化、MySQL启动命令、PostgreSQL部署启动命令
Redis启动命令
docker run -d \
--name redis-dev \
--restart unless-stopped \
-p 6379:6379 \
-v /opt/RedisData:/data \
--memory=4g \
--shm-size=256m \
redis:7.4 \
--appendonly yes \
--appendfsync everysec \
--requirepass 'Your-strong-password-here'
健康检查版
docker run -d \
--name redis-dev \
--restart unless-stopped \
-p 6379:6379 \
-v /opt/RedisData:/data \
--memory=4g \
--shm-size=256m \
--health-cmd="redis-cli -a 'Your-strong-password-here' ping" \
--health-interval=10s \
--health-timeout=5s \
--health-retries=5 \
redis:7.4 \
--appendonly yes \
--appendfsync everysec \
--requirepass 'Your-strong-password-here'
-
docker run:启动一个新的 Docker 容器。 -
--name redis-dev:给容器指定一个名称,容器名为wh-redis。指定名称便于后续操作,例如停止或启动容器时,可以通过名字直接操作容器。 -
-p 6379:6379:- 将宿主机的端口
6379映射到容器内的端口6379。 6379是 Redis 默认的监听端口,因此这个映射会允许你通过宿主机的6379端口访问容器内的 Redis 服务。例如,你可以通过localhost:6379来连接 Redis。
- 将宿主机的端口
-
-v /opt/RedisData:/data:- 使用 Docker 的
-v参数来进行目录挂载,指定宿主机的目录/root/RedisData映射到容器中的/data目录。 - Redis 会将它的持久化文件(如
dump.rdb和appendonly.aof)保存到/data目录中。通过挂载,Redis 的数据将保存到宿主机的/root/RedisData目录,从而实现数据持久化,即使容器删除或重启,数据也不会丢失。
- 使用 Docker 的
-
-d:让容器在后台运行(即“分离模式”),启动后不占用当前终端窗口。 -
--restart unless-stopped:- 设置容器的重启策略为
unless-stopped,这意味着:- 如果容器意外停止(例如由于系统重启或 Docker 守护进程重启),容器将自动重启。
- 但如果你手动停止容器(例如使用
docker stop命令),容器将不会自动重启,除非你再次手动启动它。
- 设置容器的重启策略为
-
redis:使用官方的 Redis 镜像来创建和启动容器。Docker Hub 上有官方维护的 Redis 镜像,默认使用最新版本的 Redis。 -
--appendonly yes:- 启用 Redis 的 AOF(Append Only File)持久化模式。AOF 记录每次写操作,确保数据实时保存到磁盘。即使 Redis 崩溃,AOF 也能恢复最近的操作记录。
- 默认情况下,Redis 只使用 RDB 持久化(定期生成快照)。通过
--appendonly yes,Redis 将每次写入操作记录到appendonly.aof文件中,这比仅使用 RDB 持久化更可靠。
--requirepass 'Your-password':这个选项会告诉 Redis 容器启动时,设置密码为Your-password。任何访问 Redis 的客户端都需要提供该密码。
MogoDB启动命令
docker run --name wh-mongo -p 27017:27017 -v /root/mongo-data:/data/db -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD='password' -d --restart unless-stopped mongo
-
docker run:启动一个新的 Docker 容器。 -
--name wh-mongo:为新容器指定一个名称wh-mongo。这样可以方便地使用容器名称进行后续的管理,例如停止、启动或删除容器。 -
-p 27017:27017:- 将宿主机的端口
27017映射到容器内的端口27017。 27017是 MongoDB 的默认端口,这样你可以通过访问localhost:27017来连接到 MongoDB 服务。
- 将宿主机的端口
-
-v /root/mongo-data:/data/db:- 使用
-v参数将宿主机的/root/mongo-data目录挂载到容器的/data/db目录。 /data/db是 MongoDB 默认的数据存储目录。通过挂载,MongoDB 的数据将保存在宿主机的/root/mongo-data目录中,从而实现数据的持久化,即使容器停止或删除,数据依然会保留在宿主机上。
- 使用
-
-e MONGO_INITDB_ROOT_USERNAME=admin:使用-e参数设置环境变量MONGO_INITDB_ROOT_USERNAME为admin。这会创建一个名为admin的管理员用户。 -
-e MONGO_INITDB_ROOT_PASSWORD='password':- 使用
-e参数设置环境变量MONGO_INITDB_ROOT_PASSWORD为'password'。这会将管理员用户admin的密码设置为password。 - 注意:在实际生产环境中,请务必使用强密码以增强安全性。
- 使用
-
-d:让容器在后台运行(即“分离模式”),这使得命令行不会被容器的输出所占用。 -
--restart unless-stopped:- 设置容器的重启策略为
unless-stopped。这意味着:- 如果容器因错误停止,Docker 将自动重启容器。
- 如果 Docker 守护进程重启,容器也会自动重启。
- 如果你手动停止容器(例如通过
docker stop),容器将不会自动重启,除非你手动再次启动它。
- 设置容器的重启策略为
-
mongo:- 使用官方的 MongoDB 镜像来创建和启动容器。默认情况下,它会拉取最新版本的 MongoDB。
MySQL启动命令
docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=rootpassword -d -p 3306:3306 -v /path/to/local/mysql/data:/var/lib/mysql --restart unless-stopped mysql:latest
--name mysql-container: 给容器命名为mysql-container。-e MYSQL_ROOT_PASSWORD=rootpassword: 设置 MySQL 的root用户密码为rootpassword(请更改为您自己的密码)。-d: 以后台模式运行容器。-p 3306:3306: 将宿主机的 3306 端口映射到容器的 3306 端口,这样可以通过宿主机访问 MySQL。-v /path/to/local/mysql/data:/var/lib/mysql: 将本地的目录(/path/to/local/mysql/data)挂载到容器中的/var/lib/mysql,确保数据持久化。请将/path/to/local/mysql/data替换为您实际使用的本地目录路径。--restart unless-stopped:- 设置容器的重启策略为
unless-stopped。这意味着:- 如果容器因错误停止,Docker 将自动重启容器。
- 如果 Docker 守护进程重启,容器也会自动重启。
- 如果你手动停止容器(例如通过
docker stop),容器将不会自动重启,除非你手动再次启动它。
- 设置容器的重启策略为
mysql:latest: 使用最新版本的 MySQL 镜像。
PostgreSQL启动命令
docker run -d \
--name postgres-dev \
--restart unless-stopped \
-e POSTGRES_PASSWORD='your_strong_password_here' \
-e TZ=Asia/Shanghai \
-p 5432:5432 \
-v /opt/pgdata:/var/lib/postgresql/data \
--shm-size=256m \
postgres:16.3
进阶版
docker run -d \
--name postgres-prod \
--restart unless-stopped \
-e POSTGRES_PASSWORD='your_strong_password_here' \
-e TZ=Asia/Shanghai \
-p 5432:5432 \
-v /opt/pgdata:/var/lib/postgresql/data \
--health-cmd="pg_isready -U postgres" \
--health-interval=10s \
--health-timeout=5s \
--health-retries=5 \
--shm-size=256m \
postgres:16.3
docker run:启动一个新的 Docker 容器。--namepostgres-dev
:给容器指定一个名称 postgres-dev。指定名称便于后续操作,例如停止、启动或查看日志时,可以直接通过名字操作容器。--restart unless-stopped:- 设置容器的重启策略为 unless-stopped,这意味着:
- 如果容器意外停止(例如由于系统重启或 Docker 守护进程重启),容器将自动重启。
- 但如果你手动停止容器(例如使用 docker stop 命令),容器将不会自动重启,除非你再次手动启动它。
- 这在开发和生产环境中都很常用,提升了容器的可用性。
- 设置容器的重启策略为 unless-stopped,这意味着:
-e POSTGRES_PASSWORD='your_strong_password_here':通过环境变量设置 PostgreSQL 超级用户 postgres 的密码。官方镜像强制要求设置密码,否则容器启动会失败。这是安全机制,请替换为强密码(生产环境建议结合 Secrets 管理)。-e TZ=Asia/Shanghai:设置容器时区为亚洲/上海(中国标准时间)。避免默认 UTC 时区导致的时间戳、日志不一致问题,国内开发者常用。-p 5432:5432:- 将宿主机的端口 5432 映射到容器内的端口 5432。
- 5432 是 PostgreSQL 默认的监听端口,这样可以通过宿主机的 localhost:5432 访问容器内的 PostgreSQL 服务。
-v /opt/pgdata:/var/lib/postgresql/data:- 使用 -v 参数进行目录挂载,将宿主机的 /opt/pgdata 目录映射到容器中的 /var/lib/postgresql/data 目录。
- /var/lib/postgresql/data 是 PostgreSQL 默认的数据存储目录。通过挂载,数据会持久化保存到宿主机,即使容器删除或重启,数据也不会丢失。
- 注意:首次运行前建议创建目录并设置权限(如 mkdir -p /opt/pgdata && chmod 700 /root/pgdata)。
-d:让容器在后台运行(detached mode),启动后不占用当前终端。--shm-size=256m:设置容器的共享内存大小为 256MB。PostgreSQL 在高并发查询、排序或 HASH 操作时容易耗尽默认的 64MB 共享内存,导致 OOM 错误。这个配置是生产/开发常见优化。postgres:latest:使用官方 PostgreSQL 镜像的最新版本。目前(2025 年 12 月),latest 标签对应 PostgreSQL 18.1(官方 Docker Hub 会自动指向最新稳定版)。开发时用 latest 方便获取新特性,生产推荐固定版本如 postgres:18.1 以确保稳定性。
“进阶版”补充
--health-cmd="pg_isready -U postgres":定义健康检查命令,使用 PostgreSQL 自带的 pg_isready 工具检测默认用户 postgres 是否能连接。--health-interval=10s:每 10 秒检查一次。--health-timeout=5s:单次检查最多等待 5 秒。--health-retries=5:连续失败 5 次后标记容器为 unhealthy。
查看健康状态:docker inspect wh-postgres --format='{{.State.Health.Status}}'

浙公网安备 33010602011771号