Skip to content

从镜像创建容器命令:docker run

启动一个新容器的核心命令,参数覆盖容器生命周期的基础配置。

常用参数

参数说明示例
-d (--detach)后台运行容器docker run -d nginx
--name指定容器名称docker run --name [容器名称] nginx
-p (--publish)端口映射(主机端口:容器端口)docker run -p 8080:80 nginx
-v (--volume)挂载数据卷(主机路径:容器路径)docker run -v /data:/app/data nginx
-e (--env)设置环境变量docker run -e "ENV=prod" nginx
--env-file从文件加载环境变量docker run --env-file .env nginx
--rm容器退出后自动删除docker run --rm alpine echo "hello"
-it交互模式(分配伪终端并保持 STDIN 打开)docker run -it ubuntu bash
--network指定容器网络docker run --network=[网络名] nginx
--link连接其他容器(旧版网络,推荐使用自定义网络替代)docker run --link redis:redis app
--entrypoint覆盖默认入口命令docker run --entrypoint /bin/bash nginx

重启策略(--restart

参数值说明示例
no不自动重启(默认)--restart=no
on-failure仅在退出状态码非 0 时重启(即出错时)。可加次数限制,如 on-failure:3--restart=on-failure:5
always无条件总是重启,即使手动停止,在 Docker 守护进程重启后也会启动--restart=always
unless-stopped总是重启,但尊重手动停止。若容器被手动停止,则 Docker 重启后不会自动启动它--restart=unless-stopped

关键点:所有策略仅在容器成功运行至少 10 秒后生效,防止启动失败无限循环

日志与调试参数

参数说明示例
--log-driver指定日志驱动(json-file, syslog, none 等)docker run --log-driver=json-file nginx
--log-opt日志驱动选项(如 max-size, max-filedocker run --log-opt max-size=10m nginx
-t (--tty)分配伪终端(常用于交互式命令)docker run -it ubuntu bash

安全与权限参数

参数说明示例
--user指定容器内用户(UID 或用户名)docker run --user 1000 nginx
--cap-add添加 Linux 权限(如 SYS_ADMINdocker run --cap-add SYS_ADMIN alpine
--cap-drop移除 Linux 权限docker run --cap-drop CHOWN alpine
--security-opt安全选项(如 seccomp=unconfineddocker run --security-opt seccomp=unconfined alpine

资源限制参数

参数说明示例
--memory (-m)限制内存(支持 m, gdocker run -m 512m nginx
--memory-swap内存 + Swap 总限制docker run -m 512m --memory-swap=1g nginx
--cpus限制 CPU 核数docker run --cpus=2 nginx
--cpu-shares-cCPU 权重(默认 1024)docker run --cpu-shares=512 nginx

其中-m参数是对容器的物理内存的使用限制,而--memory-swap是对内存和交换分区总和的限制,它们默认都是-1,也就是说没有任何的限制(如果在一开始仅指定-m参数,那么交换内存的限制与其保持一致,内存+交换等于-m的两倍大小)默认情况下跟宿主主机一样

更改容器启动参数

更改容器启动参数之前需要停止容器运行

sh
docker stop [容器名\ID]

使用 ps 命令查看要更改容器的ID

sh
docker ps -a

获取到需要修改的容器ID后输入一下命令进入文件夹

sh
cd /var/lib/docker/containers/[容器ID]

找到并编辑一个名为 config.v2.json 的文件,文件中存放为容器的启动参数

说明:如果想要让修改的参数生效则需要重启一下Docker

sh
systemctl restart docker

如果不重启Docker的话那么修改的参数会被复原成原来的