docker run 是创建并启动容器的一体化命令,本质为“docker create + docker start”两步合一;默认执行镜像的 ENTRYPOINT/CMD,加自定义命令可覆盖或传参;-d 后台运行,--rm 退出自动清理,-p 映射端口(主机:容器),-v 挂载目录,--restart 控制重启策略,镜像不存在时自动拉取但建议预拉取并固定标签。

docker run 是创建并启动容器最直接的方式,它把镜像变成一个正在运行的实例,整个过程一步到位。
docker run 的本质是“创建 + 启动”两步合一
它内部调用 docker create 生成容器对象,再执行 docker start 让它跑起来。你不需要手动拆解,但理解这点有助于排查问题——比如容器一闪而逝,往往是因为 create 成功了但 start 后主进程立即退出。
- 容器启动后,默认运行镜像中定义的
ENTRYPOINT和CMD - 如果你在命令末尾加了自定义命令(如
/bin/sh),它会覆盖CMD,甚至在有ENTRYPOINT时作为参数传入 - 没加
-d时,容器前台运行,终端会卡住并输出日志;加了-d才真正“后台化”
常用组合参数要记牢,不是堆得越多越好
关键参数按用途归类,选对几个就能覆盖大多数场景:
-
基础运行:
-d(后台)、--name myapp(命名,方便后续操作) -
网络通信:
-p 8080:80(映射端口),注意顺序是主机:容器;想暴露所有 EXPOSE 端口可用-P(大写 P) -
数据持久化:
-v /host/path:/container/path:rw(读写挂载),推荐用绝对路径,避免相对路径失效 -
环境与资源:
-e DB_HOST=172.18.0.2(传环境变量)、--memory=512m --cpus=1.0(防容器吃光宿主机资源) -
生命周期控制:
--restart unless-stopped(Docker 重启后自动拉起,适合长期服务)
首次运行建议加 --rm 或先试不带 -d
临时调试或跑一次性任务(如数据库迁移、配置校验),用 --rm 最省心:容器退出就自动删,不留“僵尸”。
如果不确定命令是否能长期运行,先去掉 -d,直接前台运行。这样能看到实时日志和错误输出,比如:
docker run --rm -p 8080:80 nginx:alpine
一旦看到 nginx: [emerg] ... 这类报错,立刻就知道配置或端口有问题,不用反复 docker logs 查。
镜像不存在时,run 会自动拉取,但别依赖它
docker run ubuntu:22.04 如果本地没这个镜像,Docker 会自动从 Docker Hub 拉取。但这会增加首次启动延迟,线上环境建议提前 docker pull ubuntu:22.04,确保镜像就绪。
另外,不指定标签(如 ubuntu 而非 ubuntu:22.04)可能拉到 latest,行为不稳定。生产环境务必固定标签。
不复杂但容易忽略


















