title: 【AI 总结】docker container run
categories:
- Docker
date: 2026-01-12 11:19:30
tags:
- Docker
- 容器
index_img:
banner_img:

docker container run | AI 总结

一、命令基础信息

  1. 核心功能:从镜像创建并运行新容器,必要时会拉取镜像;已停止的容器可通过docker start重启(保留此前变更),docker ps -a可查看所有容器(含已停止)。
  2. 命令格式
docker container run [OPTIONS] IMAGE [COMMAND] [ARG...]

其别名是docker run,二者功能完全一致。

二、关键选项及功能

选项类别 具体选项 核心作用 示例
容器标识与管理 --name 为容器指定自定义名称(便于后续操作),默认随机生成名称 docker run --name test -d nginx:alpine(创建名为test的nginx容器,后台运行)
--cidfile 将容器ID写入指定文件,便于自动化操作 docker run --cidfile /tmp/docker_test.cid ubuntu echo "test"
运行模式 -d, --detach 后台运行容器并打印容器ID,容器随根进程退出而停止 docker run -d -p 80:80 my_image nginx -g 'daemon off;'(后台运行nginx服务)
--rm 容器退出后自动删除容器及关联匿名卷,仅删除无名称卷 docker run --rm -v /foo -v awesome:/bar busybox top(退出后删除/foo卷,保留awesome卷)
资源限制 -m, --memory 设置容器内存上限,Linux下可通过/sys/fs/cgroup/memory/memory.limit_in_bytes查询 docker run -it -m 2GB --isolation=hyperv microsoft/nanoserver powershell(Hyper-V隔离模式下限制2GB内存)
--cpu-shares/--cpus 分配CPU相对权重(--cpu-shares)或指定CPU数量(--cpus,API 1.25+) docker run --cpus=2 ubuntu(给容器分配2个CPU)
网络配置 -p, --publish 将容器端口映射到主机,格式支持主机IP:主机端口:容器端口/协议 docker run -p 127.0.0.1:80:8080/tcp nginx:alpine(主机127.0.0.1的80端口映射容器8080端口)
-P, --publish-all 发布所有暴露端口到主机随机端口,仅映射EXPOSE指定或--expose添加的端口 docker run -P nginx:alpine
--network 连接容器到指定网络,支持多网络连接,可指定IP、别名等 docker run -itd --network=name=my-net,ip=192.0.2.42 busybox(连接到my-net网络并指定IP)
数据挂载 -v, --volume 绑定挂载卷,支持相对路径(Docker Engine 23+),主机目录不存在时自动创建 docker run -v ./content:/content -w /content ubuntu pwd(挂载当前content目录到容器/content,设为工作目录)
--mount 挂载卷、主机目录或tmpfs,语法更灵活,推荐使用 docker run --read-only --mount type=volume,target=/icanwrite busybox touch /icanwrite/here(只读容器挂载可写卷)
--tmpfs 挂载tmpfs目录,支持Linuxmount -t tmpfs -o的选项 docker run -d --tmpfs /run:rw,noexec,nosuid,size=65536k my_image
环境与元数据 -e, --env/--env-file 设置环境变量,--env-file从文件加载(支持注释和变量引用) docker run -e MYVAR1 --env-file ./env.list ubuntu bash(加载env.list文件变量,指定MYVAR1)
-l, --label/--label-file 为容器添加元数据(key=value格式),--label-file从文件加载 docker run -l my-label --label com.example.foo=bar ubuntu bash(添加两个标签,my-label值为空)
权限与安全 --privileged 赋予容器扩展权限(如启用所有Linux能力、访问所有主机设备),需谨慎使用 docker run -t -i --privileged ubuntu bash(容器内可执行mount等特权操作)
--security-opt 配置安全选项,如AppArmor、seccomp、标签隔离等 docker run --security-opt label=disable -it ubuntu bash(禁用容器安全标签)
--cap-add/--cap-drop 添加或移除Linux内核能力,替代--privileged的过度权限 docker run --cap-add SYS_PTRACE ubuntu(给容器添加进程跟踪能力)
命名空间 --pid 设置PID命名空间,支持host(共享主机PID空间)或关联其他容器 docker run --rm -it --pid=host alpine(容器内可查看主机所有进程)
--uts 设置UTS命名空间,--uts=host时容器共享主机 hostname 和域名,禁用--hostname/--domainname docker run --uts=host ubuntu(容器 hostname 与主机一致)
--ipc 设置IPC命名空间,支持私有、共享或关联其他容器,用于进程间通信 docker run --ipc=container:my-nginx alpine(共享my-nginx容器的IPC空间)
镜像拉取 --pull 设置镜像拉取策略,可选missing(默认,缺失时拉取)、always(始终拉取)、never(从不拉取) docker run --pull=never hello-world(仅使用本地镜像,缺失则报错)
交互与终端 -i, --interactive 保持STDIN打开,支持管道输入 `echo hello
-t, --tty 分配伪终端,支持终端交互功能(如隐藏密码输入) docker run -it debian passwd root(设置root密码时隐藏输入)

三、典型使用场景示例

  1. 后台运行服务并指定名称
docker run --name nginx-service -d -p 80:80 nginx:alpine

创建名为nginx-service的容器,后台运行nginx并映射80端口。
2. 挂载本地目录并交互操作

docker run -v $(pwd):/app -w /app -it ubuntu bash

将当前目录挂载到容器/app,设为工作目录并进入交互终端。
3. 限制资源并自动清理

docker run --rm -m 1GB --cpus=1 ubuntu stress --vm 1 --vm-bytes 512M

限制1GB内存和1个CPU,容器退出后自动删除,运行压力测试。
4. 共享主机PID空间调试

docker run --rm -it --pid=host alpine apk add --quiet htop && htop

在容器内查看并管理主机进程。
5. 配置GPU支持

docker run -it --rm --gpus all ubuntu nvidia-smi

需安装nvidia-container-runtime,容器内可使用所有GPU并查看GPU信息。

四、注意事项

  1. 权限安全--privileged选项会使容器获得接近主机的权限,存在安全风险,优先使用--cap-add精细分配权限。
  2. 端口暴露-p不指定主机IP时默认绑定0.0.0.0(所有网络接口),外部可访问,需注意防火墙策略;--expose仅暴露端口不映射到主机。
  3. 数据持久化-v--mount挂载的卷需区分匿名卷(自动生成名称)和命名卷,--rm仅删除匿名卷,命名卷需手动清理。
  4. 重启策略--restart支持no(默认)、on-failure[:max-retries]alwaysunless-stopped,需结合业务场景选择,避免无限重启。
  5. Windows兼容性:Windows容器支持process(共享内核,性能好)和hyperv(独立虚拟机,兼容性好)两种隔离模式,--device等选项语法与Linux不同。