Skip to content

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-dboolfalse后台运行容器,并打印容器 ID
--interactive-iboolfalse保持 STDIN 打开,即使没有附加
--tty-tboolfalse分配一个伪终端
--rm-boolfalse容器退出时自动删除
--restart-stringno重启策略:no, on-failure, always, unless-stopped
资源限制
参数简写类型默认值描述
--cpus-string-CPU 数量限制(例如:1.5
--cpu-shares-cint1024CPU 共享权重
--memory-mstring-内存限制(例如:512m, 1g
--memory-swap-string-总内存限制(内存 + swap)
--memory-reservation-string-内存软限制
--oom-kill-disable-boolfalse禁用 OOM Killer
--device-list-添加主机设备到容器
网络配置
参数简写类型默认值描述
--publish-plist-映射容器端口到主机(格式:host:containercontainer
--publish-all-Pboolfalse发布所有暴露的端口到随机端口
--network-stringdefault连接到网络
--hostname-hstring-容器主机名
--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-vlist-绑定挂载卷(格式:host:container[:options]
--mount-string-挂载文件系统(更灵活的语法)
--tmpfs-list-挂载 tmpfs 目录
--read-only-boolfalse以只读模式挂载容器根文件系统
--volumes-from-list-从其他容器挂载卷
环境变量
参数简写类型默认值描述
--env-elist-设置环境变量(格式:KEY=valueKEY
--env-file-list-从文件读取环境变量
--label-llist-设置元数据标签
安全与权限
参数简写类型默认值描述
--user-ustring-用户名或 UID(格式:useruid:gid
--group-add-list-添加额外的组
--cap-add-list-添加 Linux 能力
--cap-drop-list-删除 Linux 能力
--privileged-boolfalse赋予容器扩展权限
--security-opt-list-安全选项(AppArmor、SELinux 等)
--seccomp-profile-string-seccomp 配置文件路径
--read-only-boolfalse以只读模式挂载容器根文件系统
--tmpfs-list-挂载 tmpfs 目录
日志配置
参数简写类型默认值描述
--log-driver-stringjson-file日志驱动:json-file, syslog, journald, gelf, fluentd, awslogs, splunk, etwlogs, gcplogs, local, none
--log-opt-list-日志驱动选项
--log-tag-string-日志标签
其他选项
参数简写类型默认值描述
--entrypoint-string-覆盖镜像的默认入口点
--workdir-wstring-设置工作目录
--expose-list-暴露端口(不发布到主机)
--platform-string-设置平台(例如:linux/amd64, linux/arm64
--pull-stringmissing拉取镜像策略:always, missing, never
--quiet-qboolfalse抑制输出
--sig-proxy-booltrue代理接收到的信号到进程

常用组合示例

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>

相关命令

BSFC Tech Pro Tip

在生产环境中,建议始终使用 --restart 策略(如 unless-stopped)以确保容器在系统重启后自动启动。同时,使用 --memory--cpus 限制资源使用,防止单个容器消耗过多系统资源。

由 BSFC Tech 提供技术支持