Docker run最后加/bin/bash遇到的问题
Posted 是渣渣呀
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker run最后加/bin/bash遇到的问题相关的知识,希望对你有一定的参考价值。
问题展示
1.使用docker run -dit (容器ID/容器名+一些参数)/bin/bash
后台启动es镜像
[root@iZ2zegnzd0af38r6v96pcfZ test]# docker run -dit -p 9200:9200 -p 9300:9300 -e ES_JAVA_POTS="-Xms256m -Xmx256m" --name estest4 25476914cc66 /bin/bash
ca2d6cc2b66c549e14385a6facedca5801c5f277be377e8cd19acfe988850dbe
我们可以看到es是无法访问的!
2.于是我们使用docker run -dit (容器ID/容器名+一些参数)
[root@iZ2zegnzd0af38r6v96pcfZ test]# docker run -dit -p 9200:9200 -p 9300:9300 -e ES_JAVA_POTS="-Xms256m -Xmx256m" --name estest5 25476914cc66
570b16eaaf579b6cda2c053b9a29a4805aab8ca6edb07deb40598b4931de29c6
这样运行es是可以访问的!!
原因猜想
- 首先应该跟 /bin/bash 有关
- 可能是 /bin/bash 的方式没有把es的服务启动
因为我搜索为什么es容器启动了但访问不了的时候发现有人用docker启动nginx但是访问不了,最后发现是nginx服务没有启动
证实一下猜想
首先先看一下能访问的那个es容器(estest5)
(这是开启estest5后内存的使用情况)
(这是停止容器estest5后的内存使用情况)
[root@iZ2zegnzd0af38r6v96pcfZ ~]# docker start estest4
estest4
[root@iZ2zegnzd0af38r6v96pcfZ ~]# docker stop estest4
estest4
然后,再看一下不能访问的那个es容器(estest4)
[root@iZ2zegnzd0af38r6v96pcfZ ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@iZ2zegnzd0af38r6v96pcfZ ~]# docker start estest4
estest4
[root@iZ2zegnzd0af38r6v96pcfZ ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ca2d6cc2b66c 25476914cc66 "/usr/local/bin/dock…" 14 hours ago Up About a minute 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp estest4
但是,当我们查看内存使用情况时,可以看到虽然启动了estest4,但是内存基本没变化!
所以说,我觉得docker run … /bin/bash虽然启动了es容器,但是没有开启服务,所以当然访问不了,
但是为何没开启呢??我也不清楚。。
/bin/bash到底是啥?
1.bash 和 shell
首先,shell是用户和Linux(或者更准确的说,是用户和Linux内核)之间的接口程序。你在提示符下输入的每个命令都由shell先解释然后传给Linux内核。shell 是一个命令语言解释器(command-language interpreter)。拥有自己内建的 shell 命令集。此外,shell也能被系统中其他有效的Linux 实用程序和应用程序(utilities and application programs)所调用。 不论何时你键入一个命令,它都被Linux shell所解释。
其次,Bourne Again shell (bash), 是 Bourne shell 的扩展。bash 与 Bourne shell 完全向后兼容,并且在 Bourne shell 的基础上增加和增强了很多特性。
为什么要用 bash 来代替 sh 呢?Bourne shell 最大的缺点在于它处理用户的输入方面。在 Bourne shell 里键入命令会很麻烦,尤其当你键入很多相似的命令时。而 bash 准备了几种特性使命令的输入变得更容易。
-
docker run -dit (容器ID/容器名+一些参数)/bin/bash
这三个参数(-i, -t, -d :这里写在一起了 -dit ) 是啥意思-i 以交互模式运行容器,通常与 -t 同时使用;
-t 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-d 后台运行容器,并返回容器ID;
我们在使用docker run -dit (容器ID/容器名+一些参数)/bin/bash的时候,其实就是表示载入容器后运行bash(命令语言解释程序) ,
因为docker中必须要保持一个进程(运行的程序)的运行,要不然整个容器就会退出。
所以说,bash就担任起了docker中运行的那个进程的角色!而/bin/bash则是bash在linux下的位置
ps:以上都是个人看法,可能有很多错误,欢迎指正!
以上是关于Docker run最后加/bin/bash遇到的问题的主要内容,如果未能解决你的问题,请参考以下文章
docker run 最后一个参数/bin/bash和/usr/sbin/init有什么区别?(/usr/sbin/init 启动容器之后可以使用systemctl方法)
docker容器启动时执行脚本 run /bin/bash执行多条指令
输入使用 Google Cloud Run 运行的 docker 容器