赞
踩
序:本文主要记录了一下docker使用过程出现几种容器不能正常启动的情况及解决方法
首先得检察一下自己代码是否正确,特别是初学接触docker的小伙伴,更加需要注意一下这方面问题,系统会对明显错误抛出,但是小细节需要自己去注意,需要自己细细检察。例如在ES配置时通常会对内存进行设置:
docker run -d --name elasticsearch01 -p9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64 -Xmx512m" elasticsearch:7.6.2
咋一看没什么毛病,但时其实在Xms64后面是少写了一个m的,这段代码会正常执行,容器也能创建,但是启动不起来,只能删了重新建一个。
所以,首先就是得心细!!!
这个问题是我在挂载主机目录时出现的一个问题,确认语句正确情况下但是容器始终运行不起来,使用ps查看始终为空,在网上翻了挺久才找到解决方法。
出现原因:原因是CentOS7中的安全模块selinux把权限禁掉了;
解决方法:参考了一下总结了三种:
- 在启动容器时添加–privileged=true(推荐使用)
这种方法是通过给予容器赋予root级别权限来解决的,这样创建出来的container内的root拥有真正的root权限,否则,container内的root只是外部的一个普通用户权限。
示例:
docker run -i -t -v /soft:/soft --privileged=true 686672a1d0cc /bin/bash
- 临时关闭selinux:
setenforce 0
- 添加selinux规则,将要挂载的目录添加到白名单
chcon -Rt svirt_sandbox_file_t [主机挂载目录]
我尝试使用此方法解决问题时又出现了错误
chcon: can't apply partial context to unlabeled file
找了下资料提供了一个解决方法,需要修改防火墙配置文件,文件目录为:/etc/selinux/config
将上图标出修改为
SELINUX=enforcing
这个操作是涉及到selinux的三种策略了,修改模式使指令能够执行。
•enforcing:强制模式,代表 SELinux 运作中,且已经正确的开始限制 domain/type 了;
•permissive:宽容模式:代表 SELinux 运作中,不过仅会有警告讯息并不会实际限制 domain/type 的存取。这种模式可以运来作为 SELinux 的 debug 之用;
•disabled:关闭,SELinux 并没有实际运作。
参考文献:
https://www.icode9.com/content-3-840572.html
https://www.l1mn.com/p/f4yx81.html
https://blog.csdn.net/tangsilian/article/details/80144112
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。