docker start重启(保留此前变更),docker ps -a可查看所有容器(含已停止)。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密码时隐藏输入) |
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信息。
--privileged选项会使容器获得接近主机的权限,存在安全风险,优先使用--cap-add精细分配权限。-p不指定主机IP时默认绑定0.0.0.0(所有网络接口),外部可访问,需注意防火墙策略;--expose仅暴露端口不映射到主机。-v和--mount挂载的卷需区分匿名卷(自动生成名称)和命名卷,--rm仅删除匿名卷,命名卷需手动清理。--restart支持no(默认)、on-failure[:max-retries]、always、unless-stopped,需结合业务场景选择,避免无限重启。process(共享内核,性能好)和hyperv(独立虚拟机,兼容性好)两种隔离模式,--device等选项语法与Linux不同。