elastic / elasticsearch

Free and Open Source, Distributed, RESTful Search Engine
https://www.elastic.co/products/elasticsearch
Other
69.71k stars 24.67k forks source link

elasticsearch with docker compose: unable to start with sudo due to permission on mapped folders #64872

Open garanews opened 3 years ago

garanews commented 3 years ago

If try to start docker image of elasticsearch from docker-compose with sudo and data & log folders do not exist on host or have root permission, the image will fail to start. Reproducible tests: create file docker-compose.yml

version: "3.8"
services:
  elasticsearch:
    image: 'elasticsearch:7.9.3'
    container_name: elasticsearch
    ports:
      - '0.0.0.0:9200:9200'
    environment:
      - http.host=0.0.0.0
      - discovery.type=single-node
      - cluster.name=test
      - script.allowed_types= inline
      - thread_pool.search.queue_size=100000
      - thread_pool.write.queue_size=10000
      - gateway.recover_after_nodes=1
    ulimits:
      nofile:
        soft: 65536
        hard: 65536
    volumes:
      - ./elasticsearch_data:/usr/share/elasticsearch/data
      - ./elasticsearch_logs:/usr/share/elasticsearch/logs 

1) To reproduce failure condition: create folders with sudo mkdir elasticsearch_logs && sudo mkdir elasticsearch_data start with: sudo docker-compose up OR start with: sudo docker-compose up without creating folders

Error:

Invalid -Xlog option '-Xlog:gc*,gc+age=trace,safepoint:file=logs/gc.log:utctime,pid,tags:filecount=32,filesize=64m', see error log for details.
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
    at org.elasticsearch.tools.launchers.JvmErgonomics.flagsFinal(JvmErgonomics.java:126)
    at org.elasticsearch.tools.launchers.JvmErgonomics.finalJvmOptions(JvmErgonomics.java:88)
    at org.elasticsearch.tools.launchers.JvmErgonomics.choose(JvmErgonomics.java:59)
    at org.elasticsearch.tools.launchers.JvmOptionsParser.jvmOptions(JvmOptionsParser.java:137)
    at org.elasticsearch.tools.launchers.JvmOptionsParser.main(JvmOptionsParser.java:95)
Exception in thread "main" java.lang.RuntimeException: starting java failed with [1]
output:
[0.001s][error][logging] Error opening log file 'logs/gc.log': Permission denied
[0.001s][error][logging] Initialization of output 'file=logs/gc.log' using options 'filecount=32,filesize=64m' failed.
error:
Invalid -Xlog option '-Xlog:gc*,gc+age=trace,safepoint:file=logs/gc.log:utctime,pid,tags:filecount=32,filesize=64m', see error log for details.

2) To reproduce working condition: if folders do not exist do with non root: mkdir elasticsearch_logs && mkdir elasticsearch_data OR if folder exists do: sudo chown 1000:1000 elasticsearch_logs && sudo chown 1000:1000 elasticsearch_data

Solution suggested: It seems not possible modify user permissions of docker-compose mapped volumes so need modify / review Dockerfile online.

elasticmachine commented 3 years ago

Pinging @elastic/es-core-infra (:Core/Infra/Packaging)

garanews commented 3 years ago

I confirm the similar behavior on docker for windows: If logs and data folders are created by user before start docker-compose it works, otherwise if folders are not existing and start:

elasticsearch    | Error: Could not create the Java Virtual Machine.
elasticsearch    | Error: A fatal exception has occurred. Program will exit.
elasticsearch    |      at org.elasticsearch.tools.launchers.JvmErgonomics.flagsFinal(JvmErgonomics.java:126)
elasticsearch    |      at org.elasticsearch.tools.launchers.JvmErgonomics.finalJvmOptions(JvmErgonomics.java:88)
elasticsearch    |      at org.elasticsearch.tools.launchers.JvmErgonomics.choose(JvmErgonomics.java:59)
elasticsearch    |      at org.elasticsearch.tools.launchers.JvmOptionsParser.jvmOptions(JvmOptionsParser.java:137)
elasticsearch    |      at org.elasticsearch.tools.launchers.JvmOptionsParser.main(JvmOptionsParser.java:95)
elasticsearch    | Exception in thread "main" java.lang.RuntimeException: starting java failed with [1]
elasticsearch    | output:
elasticsearch    | [0.002s][error][logging] Error opening log file 'logs/gc.log': Permission denied
elasticsearch    | [0.002s][error][logging] Initialization of output 'file=logs/gc.log' using options 'filecount=32,filesize=64m' failed.
elasticsearch    | error:
elasticsearch    | Invalid -Xlog option '-Xlog:gc*,gc+age=trace,safepoint:file=logs/gc.log:utctime,pid,tags:filecount=32,filesize=64m', see error log for details.
elasticsearch    | Error: Could not create the Java Virtual Machine.
elasticsearch    | Error: A fatal exception has occurred. Program will exit.
elasticsearch    |      at org.elasticsearch.tools.launchers.JvmErgonomics.flagsFinal(JvmErgonomics.java:126)
elasticsearch    |      at org.elasticsearch.tools.launchers.JvmErgonomics.finalJvmOptions(JvmErgonomics.java:88)
elasticsearch    |      at org.elasticsearch.tools.launchers.JvmErgonomics.choose(JvmErgonomics.java:59)
elasticsearch    |      at org.elasticsearch.tools.launchers.JvmOptionsParser.jvmOptions(JvmOptionsParser.java:137)
elasticsearch    |      at org.elasticsearch.tools.launchers.JvmOptionsParser.main(JvmOptionsParser.java:95)
elasticsearch    | Exception in thread "main" java.lang.RuntimeException: starting java failed with [1]
elasticsearch    | output:
elasticsearch    | [0.014s][error][logging] Error opening log file 'logs/gc.log': Permission denied
elasticsearch    | [0.014s][error][logging] Initialization of output 'file=logs/gc.log' using options 'filecount=32,filesize=64m' failed.
elasticsearch    | error:
elasticsearch    | Invalid -Xlog option '-Xlog:gc*,gc+age=trace,safepoint:file=logs/gc.log:utctime,pid,tags:filecount=32,filesize=64m', see error log for details.
elasticsearch    | Error: Could not create the Java Virtual Machine.
elasticsearch    | Error: A fatal exception has occurred. Program will exit.
elasticsearch    |      at org.elasticsearch.tools.launchers.JvmErgonomics.flagsFinal(JvmErgonomics.java:126)
elasticsearch    |      at org.elasticsearch.tools.launchers.JvmErgonomics.finalJvmOptions(JvmErgonomics.java:88)
elasticsearch    |      at org.elasticsearch.tools.launchers.JvmErgonomics.choose(JvmErgonomics.java:59)
elasticsearch    |      at org.elasticsearch.tools.launchers.JvmOptionsParser.jvmOptions(JvmOptionsParser.java:137)
elasticsearch    |      at org.elasticsearch.tools.launchers.JvmOptionsParser.main(JvmOptionsParser.java:95)
elasticsearch    | Exception in thread "main" java.lang.RuntimeException: starting java failed with [1]
elasticsearch    | output:
elasticsearch    | [0.003s][error][logging] Error opening log file 'logs/gc.log': Permission denied
elasticsearch    | [0.003s][error][logging] Initialization of output 'file=logs/gc.log' using options 'filecount=32,filesize=64m' failed.
elasticsearch    | error:
elasticsearch    | Invalid -Xlog option '-Xlog:gc*,gc+age=trace,safepoint:file=logs/gc.log:utctime,pid,tags:filecount=32,filesize=64m', see error log for details.
joshxyzhimself commented 4 months ago