有时候docker容器可能因为映射不对,或者内部文件错误等等,会出现一启动就挂掉的情况,这种往往就是容器启动入口的程序有问题,但是因为一启动就挂,有时候日志啥的都看不到。这时候就可以通过 command
指令去覆盖掉默认Dockerfile
里面的 CMD
定义的入口(EntryPoint
定义的也类似)。
覆盖方式有两种
一种是 command: ["sleep","infinity"]
让主线程无限休眠,那么程序也就不会停止,那么docker 容器也就不会停掉。这样就可以通过 docker exec -it xxx bash
进入容器查看了。
另一个命令是 command: ["tail","-f","/dev/null"]
作用也是同理。
但是如果是用 docker swarm
或者 k8s
部署的调试的时候要注意, 因为这时候会有容器健康检测和重启策略,用了上述命令,因为覆盖了默认的程序启动入口,那么健康检测逻辑就会失败,容器处于unhealthy
状态,然后就触发重启策略。
所以记得注释掉相关配置,如下示例:
version: "3.5"
<