docker容器状态Exited(1)第二篇(elasticsearch镜像内存溢出情况)

之前写了第一篇文章,当时加载MySQL镜像,挂载MySQL容器,出了一次状态Exited(1)的情况,我以为是因为多次安装的原因,但是现在看来不是这回事。虽然在第一篇文章中顺利的解决了,对知识一知半解不是一个好的学习者的态度。

最近准备学习ES的时候,同样是拉取了多次镜像,第一次拉取的5.1.1版本,rmi掉,拉取了好几次,发现了5.1.2版本。

(官方镜像没法直接拉取:使用的docker pull elasticsearch5.1。这个命令会拉取5.1最后的版本镜像,是5.1.2版本,最新版好像是7.2.0)

加载完镜像,挂载容器,再次出现了状态Exited(1)的情况,按照第一篇走了一遍流程发现并不能解决问题,误导了广大读者非常抱歉(毕竟我也是新手哈)。

进入正文:

我在网上查询了好多相关内容,这里针对某些情况处理一下,因为引起状态Exited(1)的情况并不确定,因此这次不敢夸下海口说可以解决全部读者问题。这篇文章主要给读者提供思路。

因为多次调试不能成功挂载容器,因此,在网上找到了一条这个命令(查看容器的挂载日志,我是这么理解的):

docker logs elasticsearch_5.1.2

通过这条命令,我重新挂载容器,使用的命令是(这个也是限制内存的命令,但是不知道为啥没起作用):

docker run -d -m 256M --memory-swap 512M -p 9200:9200 -p 9300:9300 --name elasticsearch_5.1.2 docker.io/elasticsearch:5.1.2

使用日志命令,查看日志,内容为(大致意思是说内存不够):

#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 2060255232 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /tmp/hs_err_pid1.log
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000085330000, 2060255232, 0) failed; error='Cannot allocate memory' (errno=12)

然后我去查看内存中都有啥,命令:docker stats -a(查看内存中所有容器占用内存和其他信息),使用Ctrl+C退出

随后根据线索在网上查找内存不够的解决方法之一,设置环境变量(这里给出本人亲测可以使用的命令,网上好多写的不对):

docker run -d -p 9200:9200 -p 9300:9300 -e ES_JAVA_OPTS="-Xms64M -Xmx256M" --name elasticsearch_5.1.2 docker.io/elasticsearch:5.1.2

可以拿去试一下,同时解释一下:

-d :后台运行

-p:指向端口号

-e:设置环境变量(好像很重要)。ES_JAVA_OPTS变量名,-Xms下限,-Xmx上限

此处扩展一个(-m : 设置内存大小),但是我觉得使用后没有效果不知道为啥,请知道的读者留言。

执行这个命令后,容器成功挂载,如果有问题,留言,我随时关注CSDN。

猜你喜欢

转载自blog.csdn.net/FV8023/article/details/95591542