【AI 总结】docker container run
docker container run | AI 总结
一、命令基础信息
- 核心功能:从镜像创建并运行新容器,必要时会拉取镜像;已停止的容器可通过
docker start重启(保留此前变更),docker ps -a可查看所有容器(含已停止)。 - 命令格式:其别名是
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 密码时隐藏输入) |
三、典型使用场景示例
- 后台运行服务并指定名称:创建名为 nginx-service 的容器,后台运行 nginx 并映射 80 端口。
1
docker run --name nginx-service -d -p 80:80 nginx:alpine - 挂载本地目录并交互操作:将当前目录挂载到容器 /app,设为工作目录并进入交互终端。
1
docker run -v $(pwd):/app -w /app -it ubuntu bash - 限制资源并自动清理:限制 1GB 内存和 1 个 CPU,容器退出后自动删除,运行压力测试。
1
docker run --rm -m 1GB --cpus=1 ubuntu stress --vm 1 --vm-bytes 512M - 共享主机 PID 空间调试:在容器内查看并管理主机进程。
1
docker run --rm -it --pid=host alpine apk add --quiet htop && htop - 配置 GPU 支持:需安装 nvidia-container-runtime,容器内可使用所有 GPU 并查看 GPU 信息。
1
docker run -it --rm --gpus all ubuntu nvidia-smi
四、注意事项
- 权限安全:
--privileged选项会使容器获得接近主机的权限,存在安全风险,优先使用--cap-add精细分配权限。 - 端口暴露:
-p不指定主机 IP 时默认绑定0.0.0.0(所有网络接口),外部可访问,需注意防火墙策略;--expose仅暴露端口不映射到主机。 - 数据持久化:
-v和--mount挂载的卷需区分匿名卷(自动生成名称)和命名卷,--rm仅删除匿名卷,命名卷需手动清理。 - 重启策略:
--restart支持no(默认)、on-failure[:max-retries]、always、unless-stopped,需结合业务场景选择,避免无限重启。 - Windows 兼容性:Windows 容器支持
process(共享内核,性能好)和hyperv(独立虚拟机,兼容性好)两种隔离模式,--device等选项语法与 Linux 不同。
【AI 总结】docker container run
https://blog.lllllan.cn/docker/containers/run/