首页 > 经验记录 > 如何不启动容器,直接进入Docker镜像里执行命令?

如何不启动容器,直接进入Docker镜像里执行命令?

 

当你自己打的Docker镜像 run 失败了的时候,想要调试还是有特殊方法的。

最低级的方法就是去重新写Dockerfile,然后重新build、执行看日志,效率损失过于高昂。

 

简单来说,我们可以在不启动容器的情况下,直接进入Docker镜像里执行命令, 这样子对我们调试而言就很舒服了。

 

 

实现的方式就是在启动容器时 手动设置 entrypoint 入口点覆盖掉镜像中的CMD命令,使用自己自定义的方式启动。

比如可以设置为一般镜像都有的 /bin/bash。

当然,如果你是 Alpine Linux 这种连Bash都没有的极简镜像,那可以在Dockerfile里写上 `RUN apk add –no-cache bash` 来手动安装。

但如果你不需要执行bash脚本,只需要看看文件正不正确啊,某个命令能不能执行啊。 可以直接使用 /bin/sh 来作为Docker的 entrypoint  。

 

执行以下命令( 以 /bin/bash 作为示例)

docker run --rm -it --entrypoint=/bin/bash image-name

 

image-name 就是你的镜像名称

执行完毕后就是直接进入容器。

之后想 ls, 还是 vi 、 top 、 cat 都随便你自己了,因为默认的容器启动命令没有执行,现在就是相当于你直接进入了一个拥有你镜像环境的 Linux 主机而已。

 

如果你执行命令的镜像里边不存在 /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

 

 

以上,都能直接进Linux环境看了,在Docker镜像调试这一块基本就不存在什么问题了。

剩下的全看你的基础运维能力。

 

           


CAPTCHAis initialing...
EA PLAYER &

历史记录 [ 注意:部分数据仅限于当前浏览器 ]清空

      00:00/00:00