【AI 总结】docker container run

docker container run | AI 总结

一、命令基础信息

  1. 核心功能:从镜像创建并运行新容器,必要时会拉取镜像;已停止的容器可通过 docker start 重启(保留此前变更),docker ps -a 可查看所有容器(含已停止)。
  2. 命令格式
    1
    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. 后台运行服务并指定名称
    1
    docker run --name nginx-service -d -p 80:80 nginx:alpine
    创建名为 nginx-service 的容器,后台运行 nginx 并映射 80 端口。
  2. 挂载本地目录并交互操作
    1
    docker run -v $(pwd):/app -w /app -it ubuntu bash
    将当前目录挂载到容器 /app,设为工作目录并进入交互终端。
  3. 限制资源并自动清理
    1
    docker run --rm -m 1GB --cpus=1 ubuntu stress --vm 1 --vm-bytes 512M
    限制 1GB 内存和 1 个 CPU,容器退出后自动删除,运行压力测试。
  4. 共享主机 PID 空间调试
    1
    docker run --rm -it --pid=host alpine apk add --quiet htop && htop
    在容器内查看并管理主机进程。
  5. 配置 GPU 支持
    1
    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 不同。

【AI 总结】docker container run
https://blog.lllllan.cn/docker/containers/run/
作者
lllllan
发布于
2026年1月12日
许可协议