docker run
在主隔离容器中运行命令。
使用方法
sh
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]描述
docker run 命令从镜像创建一个新容器并启动它。这是 Docker 最常用的命令之一,支持大量选项来配置容器的行为。
提示
docker run 等同于先执行 docker create 再执行 docker start。如果容器在运行后退出,docker run 也会退出。
基本示例
sh
# 运行一个简单的容器
docker run hello-world
# 后台运行容器
docker run -d nginx
# 交互式运行容器
docker run -it ubuntu /bin/bash
# 运行并自动删除(容器退出后)
docker run --rm alpine echo "Hello"
# 指定容器名称
docker run --name my-container nginx选项说明
基础选项
| 参数 | 简写 | 类型 | 默认值 | 描述 |
|---|---|---|---|---|
--name | - | string | - | 为容器指定名称 |
--detach | -d | bool | false | 后台运行容器,并打印容器 ID |
--interactive | -i | bool | false | 保持 STDIN 打开,即使没有附加 |
--tty | -t | bool | false | 分配一个伪终端 |
--rm | - | bool | false | 容器退出时自动删除 |
--restart | - | string | no | 重启策略:no, on-failure, always, unless-stopped |
资源限制
| 参数 | 简写 | 类型 | 默认值 | 描述 |
|---|---|---|---|---|
--cpus | - | string | - | CPU 数量限制(例如:1.5) |
--cpu-shares | -c | int | 1024 | CPU 共享权重 |
--memory | -m | string | - | 内存限制(例如:512m, 1g) |
--memory-swap | - | string | - | 总内存限制(内存 + swap) |
--memory-reservation | - | string | - | 内存软限制 |
--oom-kill-disable | - | bool | false | 禁用 OOM Killer |
--device | - | list | - | 添加主机设备到容器 |
网络配置
| 参数 | 简写 | 类型 | 默认值 | 描述 |
|---|---|---|---|---|
--publish | -p | list | - | 映射容器端口到主机(格式:host:container 或 container) |
--publish-all | -P | bool | false | 发布所有暴露的端口到随机端口 |
--network | - | string | default | 连接到网络 |
--hostname | -h | string | - | 容器主机名 |
--dns | - | list | - | 自定义 DNS 服务器 |
--dns-search | - | list | - | 自定义 DNS 搜索域 |
--add-host | - | list | - | 添加主机到 IP 映射(格式:host:ip) |
--mac-address | - | string | - | 容器 MAC 地址 |
--ip | - | string | - | 容器 IPv4 地址 |
--ip6 | - | string | - | 容器 IPv6 地址 |
--link | - | list | - | --network 替代 |
存储挂载
| 参数 | 简写 | 类型 | 默认值 | 描述 |
|---|---|---|---|---|
--volume | -v | list | - | 绑定挂载卷(格式:host:container[:options]) |
--mount | - | string | - | 挂载文件系统(更灵活的语法) |
--tmpfs | - | list | - | 挂载 tmpfs 目录 |
--read-only | - | bool | false | 以只读模式挂载容器根文件系统 |
--volumes-from | - | list | - | 从其他容器挂载卷 |
环境变量
| 参数 | 简写 | 类型 | 默认值 | 描述 |
|---|---|---|---|---|
--env | -e | list | - | 设置环境变量(格式:KEY=value 或 KEY) |
--env-file | - | list | - | 从文件读取环境变量 |
--label | -l | list | - | 设置元数据标签 |
安全与权限
| 参数 | 简写 | 类型 | 默认值 | 描述 |
|---|---|---|---|---|
--user | -u | string | - | 用户名或 UID(格式:user 或 uid:gid) |
--group-add | - | list | - | 添加额外的组 |
--cap-add | - | list | - | 添加 Linux 能力 |
--cap-drop | - | list | - | 删除 Linux 能力 |
--privileged | - | bool | false | 赋予容器扩展权限 |
--security-opt | - | list | - | 安全选项(AppArmor、SELinux 等) |
--seccomp-profile | - | string | - | seccomp 配置文件路径 |
--read-only | - | bool | false | 以只读模式挂载容器根文件系统 |
--tmpfs | - | list | - | 挂载 tmpfs 目录 |
日志配置
| 参数 | 简写 | 类型 | 默认值 | 描述 |
|---|---|---|---|---|
--log-driver | - | string | json-file | 日志驱动:json-file, syslog, journald, gelf, fluentd, awslogs, splunk, etwlogs, gcplogs, local, none |
--log-opt | - | list | - | 日志驱动选项 |
--log-tag | - | string | - | 日志标签 |
其他选项
| 参数 | 简写 | 类型 | 默认值 | 描述 |
|---|---|---|---|---|
--entrypoint | - | string | - | 覆盖镜像的默认入口点 |
--workdir | -w | string | - | 设置工作目录 |
--expose | - | list | - | 暴露端口(不发布到主机) |
--platform | - | string | - | 设置平台(例如:linux/amd64, linux/arm64) |
--pull | - | string | missing | 拉取镜像策略:always, missing, never |
--quiet | -q | bool | false | 抑制输出 |
--sig-proxy | - | bool | true | 代理接收到的信号到进程 |
常用组合示例
Web 应用容器
sh
# 运行 Nginx Web 服务器
docker run -d \
--name my-nginx \
-p 8080:80 \
--restart unless-stopped \
nginx:latest数据库容器
sh
# 运行 MySQL 数据库
docker run -d \
--name my-mysql \
-e MYSQL_ROOT_PASSWORD=secret \
-e MYSQL_DATABASE=myapp \
-v mysql-data:/var/lib/mysql \
--restart unless-stopped \
mysql:8.0开发环境容器
sh
# 交互式开发容器
docker run -it \
--name dev-env \
-v $(pwd):/workspace \
-w /workspace \
--rm \
node:18-alpine \
sh资源限制示例
sh
# 限制 CPU 和内存
docker run -d \
--name limited-container \
--cpus="1.5" \
--memory="512m" \
--memory-swap="1g" \
nginx网络配置示例
sh
# 自定义网络和 DNS
docker run -d \
--name custom-network \
--network my-network \
--dns 8.8.8.8 \
--dns-search example.com \
--add-host db:192.168.1.100 \
nginx退出码
容器退出时会返回退出码:
0- 正常退出非 0- 错误退出
可以通过 docker inspect 查看容器的退出码:
sh
docker inspect --format='{{.State.ExitCode}}' <container>相关命令
- docker create - 创建但不启动容器
- docker start - 启动已停止的容器
- docker ps - 列出容器
- docker logs - 查看容器日志
- docker exec - 在运行中的容器内执行命令
BSFC Tech Pro Tip
在生产环境中,建议始终使用 --restart 策略(如 unless-stopped)以确保容器在系统重启后自动启动。同时,使用 --memory 和 --cpus 限制资源使用,防止单个容器消耗过多系统资源。