当自己打的Docker镜像 run 失败了的时候,想要调试最低级的方法就是去重新写Dockerfile,然后重新build、执行看日志,效率特别低。
其实可以在不启动容器的情况下,直接进入Docker镜像里执行命令, 这样子对我们调试而言就很舒服了。
1、如果只需要看看文件谁否正确,命令能否执行。 可以直接使用 /bin/sh 来作为Docker的 entrypoint。
2、 一般镜像都有的 /bin/bash,如果是用Alpine Linux 这种连Bash都没有的极简镜像,也可以在Dockerfile里手动安装,可以测试脚本运行情况。
执行以下命令( 以 /bin/bash 作为示例)
docker run --rm -it --entrypoint=/bin/bash image-name#image-name 就是你的镜像名称
执行完毕后就相当于直接进入了一个拥有你镜像环境的 Linux 主机而已,之后就可以执行 ls、 vi 、top 、cat 等。
如果镜像里边不存在 /bin/bash 会报如下错误:
docker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused “exec: \”/bin/bash\”: stat /bin/bash: no such file or directory”: unknown.
ERRO[0000] error waiting for container: context canceled
想了解一个Docker镜像启动的CMD命令是什么、环境变量是什么,entrypoint是什么, 镜像里的文件保存在什么位置,可以借助下面的命令来查看:
docker inspect image-name