如何在Docker容器中安装指定版本Elasticsearch 6.1.1
解决Docker容器中安装Elasticsearch 6.1.1的问题
我来帮你搞定这个Docker容器里安装指定版本Elasticsearch 6.1.1的问题~因为默认的6.x源会自动拉取该分支下的最新版本(比如你遇到的6.2.4),所以我们可以通过两种方式来锁定安装6.1.1版本:
方法1:直接使用官方指定版本镜像(最省心)
Elastic官方已经为每个版本的ES提供了预构建的Docker镜像,你完全不需要自己从头构建,直接在运行容器或者docker-compose配置里指定标签6.1.1即可:
用docker run直接启动
docker run -d --name es-6.1.1 elasticsearch:6.1.1
用docker-compose部署(推荐用于多服务场景)
version: '3' services: elasticsearch: image: elasticsearch:6.1.1 ports: - "9200:9200" - "9300:9300" environment: - discovery.type=single-node # 单节点模式,避免集群发现报错
这个方法的优势是官方镜像已经配置好了所有依赖和基础环境,能帮你避开很多手动构建时的坑。
方法2:自定义Dockerfile构建指定版本
如果你一定要基于基础镜像手动构建,那需要在APT安装时明确锁定版本号,避免自动拉取6.x分支的最新版本。以下是完整的Dockerfile示例:
# 选择兼容的基础镜像,比如debian:stretch FROM debian:stretch # 安装依赖并添加Elastic官方的APT密钥 RUN apt-get update && apt-get install -y apt-transport-https curl && \ curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | apt-key add - # 添加Elastic的6.x APT源 RUN echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" > /etc/apt/sources.list.d/elastic.list # 更新源并安装指定版本的Elasticsearch 6.1.1 RUN apt-get update && apt-get install -y elasticsearch=6.1.1 # 配置单节点模式(可选,避免启动时集群发现报错) RUN echo "discovery.type: single-node" >> /etc/elasticsearch/elasticsearch.yml # 暴露ES的默认端口 EXPOSE 9200 9300 # 启动Elasticsearch CMD ["/usr/share/elasticsearch/bin/elasticsearch"]
这里的关键是在apt-get install命令后加上=6.1.1,强制APT安装指定版本,而不是该分支下的最新版。
额外注意事项
- 如果之前拉过ES相关的镜像或者有APT缓存,建议构建时加上
--no-cache参数,避免缓存影响版本安装:docker build --no-cache -t my-es-6.1.1 . - ES 6.x版本需要调整宿主机的虚拟内存参数,否则启动可能报错:
(如果是生产环境,建议把这个参数写入sysctl -w vm.max_map_count=262144/etc/sysctl.conf永久生效)
内容的提问来源于stack exchange,提问作者user7422128




