#!/bin/bash
# 定义变量
ES_VERSION="8.15.3"
IMAGE_NAME="elasticsearch-with-ik:${ES_VERSION}"
IK_PLUGIN_DIR="./elasticsearch-analysis-ik-${ES_VERSION}"
DOCKERFILE_NAME="Dockerfile.es-ik"
# 检查IK插件目录是否存在
if [ ! -d "${IK_PLUGIN_DIR}" ]; then
echo "错误:IK插件目录 ${IK_PLUGIN_DIR} 不存在!"
echo "请确保当前目录下有该插件目录"
exit 1
fi
# 创建临时Dockerfile,修复权限问题
cat > ${DOCKERFILE_NAME} << EOF
FROM docker.elastic.co/elasticsearch/elasticsearch:${ES_VERSION}
# 切换到root用户以获得足够权限
USER root
# 复制本地IK插件到容器中
COPY ${IK_PLUGIN_DIR} /usr/share/elasticsearch/plugins/ik
# 设置权限
RUN chown -R elasticsearch:elasticsearch /usr/share/elasticsearch/plugins/ik
# 切换回elasticsearch用户
USER elasticsearch
CMD ["./bin/elasticsearch"]
EOF
# 构建镜像
echo "开始构建包含IK插件的Elasticsearch镜像..."
docker build -f ${DOCKERFILE_NAME} -t ${IMAGE_NAME} .
# 记录构建结果
BUILD_SUCCESS=$?
# 清理临时文件
rm -f ${DOCKERFILE_NAME}
# 提示构建结果
if [ ${BUILD_SUCCESS} -eq 0 ]; then
echo "镜像构建成功:${IMAGE_NAME}"
echo "可以使用以下命令启动:"
echo "docker run -d --name elasticsearch -p 8100:9200 -e \"discovery.type=single-node\" -e \"ES_JAVA_OPTS=-Xms512m -Xmx512m\" -e \"xpack.security.enabled=false\" --ulimit memlock=-1:-1 --ulimit nofile=65536:65536 ${IMAGE_NAME}"
else
echo "镜像构建失败"
exit 1
fi
这个文件就叫build_es_image.sh
切记 同级目录下 要下载好elasticsearch-analysis-ik-8.15.3
