网站菜单

Docker创建容器后退出解决办法

这是正常现象:容器只要主进程(PID 1)结束就会立刻退出。很可能是用镜像默认的 ENTRYPOINT/CMD 启动,命令跑完就退出了,所以状态是 Exited

下面给你一套“查原因 → 重新跑起来”的最短路径(PowerShell 语法):

1) 先看看它为什么退

docker ps -a
docker logs pulsar2_3.3
docker inspect -f '{{json .Config.Entrypoint}} {{json .Config.Cmd}}' pulsar2:3.3
  • 如果 Entrypoint/Cmd 是个一次性命令(比如脚本),它执行完就会退出。

2) 交互式重新跑(覆盖入口为 shell)

最省事是删掉已退出的容器,重新以交互式 shell 启动:

docker rm -f pulsar2_3.3

# 优先试 bash,报错再换 /bin/sh
docker run -it --name pulsar2_3.3 `
  --platform linux/amd64 `
  -v "${PWD}:/work" -w /work `
  --entrypoint /bin/bash `
  pulsar2:3.3
# 如果提示 /bin/bash: cannot execute 或不存在,改成:
# --entrypoint /bin/sh

进入后你就能在容器里做 pulsar2 的编译/调试了。之后再进容器:

docker start -ai pulsar2_3.3           # 附着到已存在的容器
# 或者容器在跑时开新终端:
docker exec -it pulsar2_3.3 /bin/bash  # 或 /bin/sh

3) 想“常驻”再进去(可选)

有些人喜欢先把容器跑成后台常驻,再随时 exec 进去:

docker rm -f pulsar2_3.3
docker run -d --name pulsar2_3.3 `
  --platform linux/amd64 `
  -v "${PWD}:/work" -w /work `
  pulsar2:3.3 tail -f /dev/null

docker exec -it pulsar2_3.3 /bin/sh    # 或 /bin/bash

这里用 tail -f /dev/null 让 PID 1 永远不退出。

4) 两个常见坑提醒

  • /bin/bash 不存在:很多精简镜像只有 /bin/sh(BusyBox/ash)。直接换 /bin/sh 即可。
  • 改动“丢失”:写到容器可写层的东西,删容器就没了。代码要挂载目录(-v "${PWD}:/work");环境变更要写进 Dockerfile 重建镜像,而不是只在容器里手工改。

重新进入

1) 直接退出容器后再进

  • 退出:在容器里输入 exit(容器会停止)
  • 重新进入:
docker start -ai pulsar2_3.3

2) 不想停容器,只是先离开一会儿

  • 在容器里按:Ctrl+P 然后 Ctrl+Q(从 TTY 分离,容器继续跑)
  • 再次进入(两种选一):
docker attach pulsar2_3.3              # 回到原来的那个终端
docker exec -it pulsar2_3.3 /bin/bash  # 或开一个新的 shell(bash 不在就用 /bin/sh)

3) 关闭 Docker Desktop(或重启系统)后再进

  • 先启动 Docker Desktop(Docker 引擎)
  • 然后:
docker start -ai pulsar2_3.3

(想让它随 Docker 引擎自动启动,可设重启策略:docker update --restart unless-stopped pulsar2_3.3

小贴士:

  • 看状态:docker ps -a
  • 代码请继续放在挂载目录里(-v ...:/work),容器删了也不丢。
  • 如果当初用的是 /bin/sh 作为入口,把上面命令里的 bash 换成 sh 就行。
显示评论 (0)

文章评论

相关推荐

爱芯元智AX650N板端验证YoloV5s

笔者的AX650N为AXCL PCIe 算力卡形态;如果你是 SoC 开发板(AXera-Pi/AX650N 等),我在文末也放了 SoC 的做法。 1. 安装运行库 在插卡的主机上(Ubuntu/D…

爱芯元智AX650N部署YoloV5s全流程

1. 训练模型 克隆 yolov5的代码,并安装 yolov5 所需的 python包 以及 onnx,这个就不多赘述了。 与瑞芯微需要特定分支的yolov5(或者修改网络结构)不同,直接使用官方的版…