总结:记一次docker调试镜像的问题 docker run -it abc:v0.1 /bin/bash

 docker(常见调试技巧):docker打包镜像调试技巧  https://www.cnblogs.com/haoprogrammer/p/11103301.html 
写Dockerfile可以先不指定CMD、ENTRYPOINT等启动命令,只要拷贝就好了

Dockerfile

#CMD ["/usr/mpsp/app/script/serv.sh","console"]

先注释掉CMD启动命令,打包镜像app,然后用sh命令启动并进入容器,

docker run -ti   basic-app-client:1.2.2.2-jdk7 sh

# 进入容器后,再执行启动脚本,调试。

进入容器后,再启动应用的启动脚本,调试即可。

非常适用于docker log日志查看报错信息 不明确的情况

摘录:总结:记一次docker调试镜像的问题

 https://blog.csdn.net/w2009211777/article/details/131124239   

命令:

docker run -it docker-registry.xxx.virtual/weeb/thor:v0.1 /bin/bash

/bin/bash是提供一个命令行环境,可以执行命令,好处是容器不会挂。

docker run -it docker-registry.xxx.virtual/weeb/thor:v0.1 ls /data

先看下docker原来。

我们先执行命令:docker run -it docker-registry.xxx.virtual/weeb/thor:v0.1

发现没有配置文件,如下报错。

怎么办?

我们再执行下:docker run -it docker-registry.xxx.virtual/weeb/thor:v0.1 ls /data

和上面命令不同的是,这个命令后面加了:“ls /data”,看下效果:

可见后面的 ls /data被执行了。这就是重点了,如果镜像后面带了命令,docker就不会再执行镜像里面定义的CMD

如下就是镜像里面定义的CMD,意思是容器起来后第一步就执行CMD,即启动服务,并且指定/data/thor/config.yaml这个配置文件启动。

而这个服务+配置文件有问题,所以就启动失败,容器就挂了。

所以总结下来,容器结束有两种方式:

1、命令执行结束;

    上面执行ls /data由于是执行完了,结束容器。

2、CMD执行出问题;

我们想让容器不挂,我们就执行/bin/bash,创建个/bin/bash环境,这个环境的容器是不会挂的,我们可以进入这个环境,然后手动执行CMD,此时,手动执行CMD只是在容器中起了个子进程,父进程是/bin/bash,即使子进程挂了,只要父进程/bin/bash不挂就没事。

我们看下效果:发现已经进来了。

原文链接:https://blog.csdn.net/w2009211777/article/details/131124239

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值