记一次docker-compose 部署 elasticsearch:6.6.2遇到的坑
总计历时2天,主要关于 docker-compose volumes 挂载宿主机目录遇到的问题
安装过程:
1.pull 镜像
# docker pull elasticsearch:6.6.2
2. 安装 IK 插件 以改造容器
# ocker run -it elasticsearch:6.6.2 或 image ID /bin/bash ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.6.2/elasticsearch-analysis-ik-6.6.2.zip
PS:此过程可用Dockfile curl 下载并 ADD 解压至 plugins 目录安装,此版本安装IK 插件 需同意协议(暂未研究出如何在DockerFile 中模拟同意协议的操作)
上述完成后
#exit
# ocker commit (run 容器bash 时所给的contaner ID) es-ik:6.6.2
over。
3. docker-compose 文件
version: ‘3’
services:
elastic-1:
image: es-ik:6.6.2 #此处使用自己构造的带IK 的 image名称
container_name: node-1
hostname: elastic-1
ports:
- 9200:9200
- 9300:9300
volumes:
- /home/docker_home/volumes/elasticsearch/node-1/data/nodes:/usr/share/elasticsearch/data/nodes
- /home/docker_home/volumes/elasticsearch/node-1/logs:/usr/share/elasticsearch/logs
environment:
- bootstrap.memory_lock=true
- ES_JAVA_OPTS=-Xms512m -Xmx512m
- discovery.type=single-node #集群模式去掉我
- TAKE_FILE_OWNERSHIP=true # 就是这货 volumes 挂载权限问题
4.上述文件描述的环境变量 TAKE_FILE_OWNERSHIP=true 如果不加上
当你开心的 使用 docker-compose up 启动时。会出现如下
在这里插入图片描述
Error opening log file ‘logs/gc.log’: Permission denied

		原因:此image 启动后 容器内 我们所需映射的文件 data 及 logs 目录 用户所有者为 elasticsearch 所在组 root
		而 docker 挂载到本机的目录 所有者 是 root 所在组 root   容器内部想写文件 or 创建文件 则会 权限不足
		上网找各路 大神的帖子及方案 
			主要参考参考 https://www.cnblogs.com/wuyida/p/6300282.html  描述的问题  几乎是同类问题  
			即:
			1.要么把宿主机的挂载目录 设置为 777 全开 
			2. 手动赋权 给 容器内的 用户ID:组ID(只能是ID,宿主机可不知道容器里的用户是啥)

· 然而 这样使用起来还是 有些麻烦的 于是开始怀疑 原生的这个image 是不是本身也支持的相关的操作 比如 赋权的那个操作

	运行
	# docker inspect (image ID)
	在一大堆信息中  找到了这个

在这里插入图片描述
继续深入 进入启动的容器中找到这个文件 cat /usr/local/bin/docker-entrypoint.sh

		if [[ "$(id -u)" == "0" ]]; then
	  # If requested and running as root, mutate the ownership of bind-mounts
		  if [[ -n "$TAKE_FILE_OWNERSHIP" ]]; then
		    chown -R 1000:0 /usr/share/elasticsearch/{data,logs}
		  fi
	   fi


在一大串shell 的最后 发现了似曾相识的东西
这不就是 我们的赋权命令吗?  于是 ,在docker-compose 文件环境变量中加上它 并设为 true  
重新执行  docker-compose up 令人讨厌的 权限不足的异常信息 终于没了。。
ps: 仅仅 做个记录 ,文法很糟糕,希望和我一样遇到 这个问题的人  能看到这
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐