我们将通过 docker run 命令来讲解,因为大多数启动参数都是 docker run 的选项。

(图片来源网络,侵删)
docker run 命令的基本语法
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
[OPTIONS]: 这就是我们今天要详细讨论的各种启动参数。IMAGE: 要运行的镜像名称和标签,nginx:latest。[COMMAND]: 容器启动后要执行的命令(可选),如果镜像中已经定义了默认的启动命令,这个参数会覆盖它。[ARG...]: 传递给[COMMAND]的参数(可选)。
核心参数分类详解
下面我将参数分为几个大类,并解释每个类别中最重要的参数。
基础与生命周期管理
这些参数控制容器的名称、是否自动删除、是否在后台运行等基本行为。
| 参数 | 简写 | 描述 | 示例 |
|---|---|---|---|
--name |
为容器指定一个名称,方便后续管理。 | docker run --name my-web-server nginx |
|
--rm |
容器停止后自动删除,非常适合用于测试或一次性任务。 | docker run --rm busybox echo "Hello" |
|
-d |
--detach |
在后台运行容器,并返回容器 ID。 | docker run -d nginx |
-it |
组合使用,-i 保持 STDIN 开启,-t 分配一个伪终端,通常用于交互式操作。 |
docker run -it ubuntu /bin/bash |
|
--restart |
指定容器的重启策略。 | docker run --restart always nginx |
|
no: 不自动重启(默认)。 |
|||
on-failure: 只有在非零退出码时才重启。 |
|||
always: 无论如何都会重启。 |
|||
unless-stopped: 除非手动停止,否则总是重启。 |
端口映射
这是最常用的参数之一,用于将容器的端口暴露给主机。
| 参数 | 简写 | 描述 | 示例 |
|---|---|---|---|
-p |
端口映射,格式为 主机端口:容器端口 或 IP:主机端口:容器端口。 |
docker run -p 8080:80 nginx (将主机8080映射到容器80) |
|
-P |
随机端口映射,将镜像中所有 EXPOSE 的端口随机映射到主机的临时端口。 |
docker run -P nginx |
数据卷管理
用于持久化数据或共享数据,将主机的目录/文件挂载到容器中。

(图片来源网络,侵删)
| 参数 | 简写 | 描述 | 示例 |
|---|---|---|---|
-v |
绑定挂载,格式为 主机路径:容器内路径。 |
docker run -v /my/data:/app/data nginx |
|
--mount |
更灵活、更明确的挂载方式,推荐使用。 | docker run --mount type=bind,source=/my/data,target=/app/data nginx |
|
-v |
命名卷,格式为 卷名:容器内路径,Docker 会自动管理这个卷的生命周期。 |
docker run -v my-named-volume:/app/data nginx |
注意:--mount 是更现代的语法,功能更强大(可以指定只读、挂载类型等),而 -v 是传统的语法,但依然非常流行。
环境变量
用于向容器内部传递配置信息。
| 参数 | 简写 | 描述 | 示例 |
|---|---|---|---|
-e |
设置环境变量。 | docker run -e "MY_VAR=my_value" nginx |
|
--env-file |
从文件中读取环境变量,文件每行一个 KEY=VALUE。 |
docker run --env-file .env nginx |
资源限制
用于控制容器可以使用的主机资源,防止某个容器耗尽所有资源。
| 参数 | 简写 | 描述 | 示例 |
|---|---|---|---|
--memory |
-m |
限制内存使用,可以带单位(b, k, m, g)。 |
docker run -m 512m nginx |
--cpus |
限制 CPU 使用,可以是小数(表示核数)或百分比。 | docker run --cpus="1.5" nginx (最多使用1.5个核) |
|
--cpus |
docker run --cpus="0.5" nginx (最多使用50%的CPU) |
||
--memory-swap |
限制内存+交换分区,必须大于 --memory 的值,设为0表示和内存限制一样。 |
docker run -m 512m --memory-swap 1g nginx |
|
--pids-limit |
限制进程数。 | docker run --pids-limit 100 nginx |
网络配置
控制容器的网络模式。

(图片来源网络,侵删)
| 参数 | 简写 | 描述 | 示例 |
|---|---|---|---|
--network |
指定网络模式。 | docker run --network bridge nginx (默认模式) |
|
none: 容器没有网络。 |
docker run --network none nginx |
||
host: 容器共享主机的网络命名空间,性能好,但安全性低。 |
docker run --network host nginx |
||
container:<name/id>: 与另一个容器共享网络命名空间。 |
docker run --network container:my-other-container nginx |
||
--ip |
指定容器的 IP 地址(仅在自定义网络中有效)。 | docker run --network my-custom-net --ip 172.18.0.10 nginx |
用户与安全
| 参数 | 简写 | 描述 | 示例 |
|---|---|---|---|
-u |
指定运行容器的用户,可以是用户名、UID 或 user:group。 |
docker run -u 1000 nginx |
|
--read-only |
以只读模式挂容器的根文件系统,需要结合 -v 或 --mount 来提供可写的临时目录(如 /tmp)。 |
docker run --read-only -v /tmp:/tmp nginx |
|
--security-opt |
设置安全选项,禁用 SELinux 或 AppArmor。 | docker run --security-opt label=disable nginx |
日志配置
| 参数 | 简写 | 描述 | 示例 |
|---|---|---|---|
--log-driver |
指定日志驱动,如 json-file, journald, syslog 等。 |
docker run --log-driver syslog nginx |
|
--log-opt |
为日志驱动设置选项。 | docker run --log-driver json-file --log-opt max-size="10m" --log-opt max-file="3" nginx |
综合示例
下面是一个相对复杂的 docker run 命令,它结合了我们上面讲到的多个参数:
docker run -d \ --name my-app \ --restart unless-stopped \ -p 8080:80 \ -v /opt/my-app/data:/usr/share/nginx/html \ -v /opt/my-app/logs:/var/log/nginx \ -e "ENVIRONMENT=production" \ --memory 512m \ --cpus 1.0 \ --log-driver json-file \ --log-opt max-size="10m" \ --log-opt max-file="3" \ nginx:latest
这条命令的含义是:
-d: 在后台运行容器。--name my-app: 将容器命名为my-app。--restart unless-stopped: 除非手动停止,否则容器退出后总是重启。-p 8080:80: 将主机的 8080 端口映射到容器的 80 端口。-v /opt/my-app/data:/usr/share/nginx/html: 将主机的/opt/my-app/data目录挂载到容器的网页根目录,用于持久化网页内容。-v /opt/my-app/logs:/var/log/nginx: 将主机的/opt/my-app/logs目录挂载到容器的日志目录,用于持久化日志。-e "ENVIRONMENT=production": 设置一个环境变量ENVIRONMENT为production,供应用使用。--memory 512m: 限制容器最多使用 512MB 内存。--cpus 1.0: 限制容器最多使用 1 个 CPU 核心。--log-driver ...: 配置日志驱动为json-file,并限制单个日志文件最大为 10MB,最多保留 3 个日志文件。
其他重要命令
除了 docker run,还有一些命令也带有启动参数,用于管理已经运行的容器:
docker create: 与docker run类似,但它只创建容器,不启动它,返回容器 ID,你可以用docker start <container_id>来启动它。docker exec: 在正在运行的容器中启动一个新进程。docker exec -it my-app /bin/bash: 进入my-app容器的 shell。docker exec my-app ls /usr/share/nginx/html: 在容器内执行ls命令。
docker update: 更新一个或多个已运行容器的配置(例如资源限制)。docker update --memory 1g my-app: 将my-app容器的内存限制更新为 1GB。
掌握这些参数是使用 Docker 的基础,建议你:
- 从常用参数开始:
-d,-p,-v,-e是最核心的。 - 查阅官方文档:Docker 的更新很快,所有参数的最终解释权威来源是 Docker Engine CLI documentation。
- 多加练习:尝试组合不同的参数来创建满足你需求的容器,这是最好的学习方式。
