启动Docker容器的核心指令是docker start(仅重启已停止容器)和docker run(新建并运行容器);前者不接受镜像名或运行参数,后者通过-d等参数控制前台/后台运行,并依赖主进程长期存活确保容器持续运行。

启动 Docker 容器的核心指令是 docker start,但它只适用于已创建但处于停止状态的容器;若要新建并运行容器,应使用 docker run。是否后台运行、如何持续运行、怎样避免容器立即退出,这些都取决于启动时的参数配置和容器内主进程的行为。
start 指令:仅重启已存在的停止容器
docker start 不会重新创建容器,也不接受镜像名或运行参数(如端口映射、环境变量)。它只是唤醒一个之前用 docker create 或 docker run 创建过、当前状态为 Exited 的容器。
- 查看已停止容器:
docker ps -a --filter "status=exited" - 启动指定容器:
docker start <container_id_or_name></container_id_or_name> - 启动后进入交互模式(需容器支持):
docker start -i <container_id></container_id>(等价于docker attach) - 注意:
docker start不会自动附加终端,也不会重设资源限制或挂载卷——那些都在创建时固定了
run 指令:创建并运行,决定是否后台的关键
绝大多数场景下,你真正需要的是 docker run。它一步完成创建 + 启动,并通过参数控制前台/后台行为:
- -d(detached):后台运行,命令返回容器 ID 后立即退出 shell,容器在后台持续运行
- 不加
-d:前台运行,终端被容器主进程占用,Ctrl+C 会发送 SIGINT 并停止容器 - 容器能否“持续运行”,取决于 CMD 或 ENTRYPOINT 指定的进程是否长期存活。例如
bash或echo "hello"运行完就退出,容器随即停止 - 常见后台服务示例:
docker run -d -p 8080:80 nginx(nginx 主进程常驻)
让容器稳定后台运行的必要配置
光加 -d 不够,还需确保容器有持续运行的主进程,并按需调整行为:
-
避免因主进程退出导致容器终止:用
tail -f /dev/null或sleep infinity占位(调试用),生产环境应运行真实服务进程 -
标准输入保持开启(可选):加
-i(interactive)配合-d无意义,但加-t(tty)通常也不必要;若需接收信号或日志流,确保进程未忽略 SIGHUP/SIGTERM -
健康检查与重启策略:用
--health-cmd和--restart unless-stopped提升健壮性 -
日志不阻塞:默认日志驱动(json-file)不影响后台运行,但大量输出建议配
--log-opt max-size=10m --log-opt max-file=3
验证与调试后台容器状态
启动后别假设它在跑,主动确认:
- 查运行中容器:
docker ps(只显示 running 状态) - 看完整列表(含已停止):
docker ps -a - 查某容器日志:
docker logs <container_id></container_id>(加-f实时跟踪) - 进容器调试:
docker exec -it <container_id> /bin/sh</container_id>(前提是镜像含 shell 且容器仍在运行) - 若容器启动即退出,先执行
docker ps -a查 STATUS 列,再用docker logs看退出原因(如端口被占、配置错误、权限不足)

















