docker安装elasticsearch报错AccessDeniedException:/tmp/elasticsearch的解决

 更新时间:2025年10月24日 09:51:37   作者:嗷大猫...  
在使用Docker安装Elasticsearch 7.7.1时遇到权限问题,通过设置环境变量、修改挂载目录权限、进入容器排查问题以及使用docker-compose最终解决了问题

docker安装elasticsearch报错

按照elasticsearch的官方文档用docker安装7.7.1版本的es,报错

(顺带说以下,如果我把镜像的版本换成最新的7.12.1,不会报错。用7.7.1的就会报错)

[root@webapi4-app-22-151 workspace]# docker run -p 9200:9200 -p 9300:9300 -e “discovery.type=single-node” docker.elastic.co/elasticsearch/elasticsearch:7.7.1
Exception in thread “main” java.nio.file.AccessDeniedException: /tmp/elasticsearch-8523317643108022907
at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:90)
at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)
at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:116)
at java.base/sun.nio.fs.UnixFileSystemProvider.createDirectory(UnixFileSystemProvider.java:389)
at java.base/java.nio.file.Files.createDirectory(Files.java:694)
at java.base/java.nio.file.TempFileHelper.create(TempFileHelper.java:135)
at java.base/java.nio.file.TempFileHelper.createTempDirectory(TempFileHelper.java:172)
at java.base/java.nio.file.Files.createTempDirectory(Files.java:1011)
at org.elasticsearch.tools.launchers.Launchers.createTempDirectory(Launchers.java:66)
at org.elasticsearch.tools.launchers.TempDirectory.main(TempDirectory.java:54)

大概搜了下这个问题,别人的报错都是/usr/share/elasticsearch目录,而我的是/tmp目录,不太一样.

我用别人的解决方法

  • 设置环境变量TAKE_FILE_OWNERSHIP=true
  • 容器内chown -R 1000:0 /usr/share/elasticsearch/{data,logs}
  • 把宿主机的挂载目录权限设置成777

这三种办法不管用,还是报错,所以,使出绝招,进入容器里面排错.

启动一个临时容器,默认执行命令/bin/bash

默认执行命令变成了/bin/bash,而不是docker-entrypoint.sh,容器主进程是/bin/bash所以容器不会遇到错误导致退出

[root@webapi4-app-22-151 workspace]# docker run -itd -e “discovery.type=single-node” docker.elastic.co/elasticsearch/elasticsearch:7.7.1 /bin/bash
5f733625a5808d15c8895cb12ddf94845f5f1b57960edd1d224544cf8da08bab
[root@webapi4-app-22-151 workspace]# docker exec -it 5f7 bash
[root@5f733625a580 elasticsearch]#
#执行es容器的启动脚本,报错
[root@5f733625a580 elasticsearch]# sh /usr/local/bin/docker-entrypoint.sh

就是出现的这个错误,/tmp目录

然后在容器里给/tmp目录授权777,重新执行脚本

[root@5f733625a580 elasticsearch]# chmod 777 /tmp
[root@5f733625a580 elasticsearch]# sh /usr/local/bin/docker-entrypoint.sh

报了新的错误

Error opening log file ‘logs/gc.log’: Permission denied

给容器内的/usr/share/elasticsearch目录设置权限

[root@5f733625a580 elasticsearch]# chown -R 1000:0 /usr/share/elasticsearch/
[root@5f733625a580 elasticsearch]# sh /usr/local/bin/docker-entrypoint.sh

最后elasticsearch服务启动成功

总结: 先配置

chmod 777 /tmp
chown -R 1000:0 /usr/share/elasticsearch/

这两条命令再执行脚本docker-entrypoint.sh

解决问题后

使用docker-compose安装,docker-compose.yml:

version: '2'
services:
  es:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.7.1
    container_name: es
    ports:
    - 9200:9200
    environment:
    - discovery.type=single-node
    - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
    - /data/elk/es/data:/usr/share/elasticsearch/data
    command:
    - /bin/bash 
    - -c 
    - |  
        chmod 777 /tmp
        chown -R 1000:0 /usr/share/elasticsearch/
        sh /usr/local/bin/docker-entrypoint.sh

启动成功

[root@webapi4-app-22-151 workspace]# docker-compose up -d
Creating es … done
[root@webapi4-app-22-151 workspace]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
062266bf95cd docker.elastic.co/elasticsearch/elasticsearch:7.7.1 “/tini – /usr/local…” 2 seconds ago Up 2 seconds 0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 9300/tcp es
[root@webapi4-app-22-151 workspace]# curl localhost:9200
{
“name” : “062266bf95cd”,
“cluster_name” : “docker-cluster”,
“cluster_uuid” : “ndgcRUCJTb6pNWUeJRCMLw”,
“version” : {
“number” : “7.7.1”,
“build_flavor” : “default”,
“build_type” : “docker”,
“build_hash” : “ad56dce891c901a492bb1ee393f12dfff473a423”,
“build_date” : “2020-05-28T16:30:01.040088Z”,
“build_snapshot” : false,
“lucene_version” : “8.5.1”,
“minimum_wire_compatibility_version” : “6.8.0”,
“minimum_index_compatibility_version” : “6.0.0-beta1”
},
“tagline” : “You Know, for Search”
}

目前暂时解决了这个问题,但是应该有更优的解决方法

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Docker镜像瘦身大小从1.43 GB减少到22.4MB

    Docker镜像瘦身大小从1.43 GB减少到22.4MB

    本文主要介绍了 Docker镜像瘦身大小从1.43 GB减少到22.4MB,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • docker交叉编译工具链解读

    docker交叉编译工具链解读

    使用Docker容器进行交叉编译具有环境隔离、一致性、可移植性和简化配置等优势,以下是一个示例的Dockerfile,用于创建一个包含C++11 ARM交叉编译工具链的Docker容器,构建完成后,可以在容器中进行ARM交叉编译
    2024-12-12
  • 两小时入门Docker教程实践

    两小时入门Docker教程实践

    这篇文章主要介绍了两小时入门Docker教程实践,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-03-03
  • Docker容器不断重启问题解决

    Docker容器不断重启问题解决

    本文主要介绍了使用docker-compose.yml配置文件启动容器时遇到的问题,卷标冲突和容器无法启动,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-11-11
  • Docker自定义镜像的实现步骤(SpringBoot程序为例)

    Docker自定义镜像的实现步骤(SpringBoot程序为例)

    Docker自定义镜像指的是用户根据自己的需求和规范,使用Dockerfile或其他方式创建的一个Docker镜像,本文给大家介绍了Docker自定义镜像的实现步骤,文中通过图文讲解的非常详细,需要的朋友可以参考下
    2024-06-06
  • Docke更新应用程序的过程详解

    Docke更新应用程序的过程详解

    这篇文章主要介绍了Docke更新应用程序,在本节中,您学习了如何更新和重建容器,以及如何停止和删除容器,需要的朋友可以参考下
    2023-11-11
  • docker 挂载、修改文件的步骤

    docker 挂载、修改文件的步骤

    这篇文章主要介绍了docker 挂载、修改文件的步骤,咱们使用的是docker的 copy 命令从容器中 copy 出来相关的配置文件,在本地修改,修改完毕在使用docker的 copy 命令从本地 copy 到容器中,重启容器生效的,需要的朋友可以参考下
    2023-03-03
  • 浅谈Docker基础之数据管理

    浅谈Docker基础之数据管理

    这篇文章主要介绍了浅谈Docker基础之数据管理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • Docker+K8s集成部署的实战

    Docker+K8s集成部署的实战

    本文详细介绍了Docker与Kubernetes在企业级生产环境中的集成部署实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-05-05
  • 如何使用Docker快速搭建服务器环境

    如何使用Docker快速搭建服务器环境

    这篇文章主要介绍了使用Docker快速搭建服务器环境的详细步骤,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-10-10

最新评论