Запуск Kibana в образе Docker дает ошибку без полномочий root

У меня возникают проблемы с настройкой стека ELK (v7.6.0) в докере с помощью Docker-Compose.

Elastic Search и Logstash запускаются нормально, но Kibana мгновенно существует, журналы докера для этого контейнера сообщают:

Kibana should not be run as root.  Use --allow-root to continue.

docker-compose для этих элементов выглядит так:

  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.6.0
    environment:
      - discovery.type=single-node
    ports:
      - 9200:9200
    mem_limit: 2gb

  kibana:
    image: docker.elastic.co/kibana/kibana:7.6.0
    environment:
      - discovery.type=single-node
    ports:
      - 5601:5601
    depends_on:
      - elasticsearch

  logstash:
    image: docker.elastic.co/logstash/logstash:7.6.0
    ports:
      - "5000:5000/tcp"
      - "5000:5000/udp"
      - "9600:9600"
    mem_limit: 2gb
    depends_on:
      - elasticsearch

Как отключить запуск от имени root или настроить приложение так, чтобы оно не запускалось от имени root?


person Rob Earlam    schedule 06.03.2020    source источник
comment
Официальный файл dockerfile Kinaba указывает, что он работает от имени kibana пользователя. Это сбивает с толку, почему он работает как root на вашем конце.   -  person Rafaf Tahsin    schedule 06.03.2020
comment
Согласно комментарию, который я оставил ниже, кажется, что я сталкиваюсь с проблемой только при работе в режиме контейнера Windows, используя экспериментальные функции, позволяющие контейнерам Linux и Windows работать бок о бок.   -  person Rob Earlam    schedule 07.03.2020
comment
Похоже, у меня возникла проблема с запуском ELK в экспериментальном режиме Windows Docker, поэтому я открыл проблему для этого github.com/elastic/kibana/issues/59604   -  person Rob Earlam    schedule 07.03.2020


Ответы (3)


я только что запустил этот образ докера, и все работает отлично, я делюсь своим файлом создания докера:

version: '3.7'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.6.0
    container_name: elasticsearch
    environment:
       - node.name=node
       - cluster.name=elasticsearch-default
       - bootstrap.memory_lock=true
       - discovery.type=single-node
       - "ES_JAVA_OPTS=-Xms1g -Xmx1g"
    ports:
      - "9200:9200"
    expose: 
      - "9200"
    networks:
      - "esnet"

  kibana:
    image: docker.elastic.co/kibana/kibana:7.6.0
    container_name: kibana
    ports:
      - "5601:5601"
    expose: 
      - "5601"
    networks:
      - "esnet"
    depends_on: 
      - elasticsearch

 logstash:
   image: docker.elastic.co/logstash/logstash:7.6.0
   ports:
     - "5000:5000/tcp"
     - "5000:5000/udp"
     - "9600:9600
   depends_on: 
     - elasticsearch
   networks:
     - "esnet"
networks: 
  esnet:
person evalufran    schedule 06.03.2020
comment
Итак, это работает при запуске контейнеров Linux, однако я хочу получать журналы из контейнеров Windows, используя экспериментальные функции Docker для одновременного запуска контейнеров Linux и Windows. При запуске в режиме контейнера Windows у меня сначала возникают проблемы с памятью. Это можно исправить, перейдя к Docker-Compose 2.4 и установив ограничения памяти для контейнеров. Однако тогда вы столкнетесь с проблемой root-пользователя, описанной в моем первом посте. - person Rob Earlam; 07.03.2020
comment
Похоже, у меня возникла проблема с запуском ELK в экспериментальном режиме Windows Docker, поэтому я открыл проблему для этого github.com/elastic/kibana/issues/59604 - person Rob Earlam; 07.03.2020

У меня такая же проблема. Я запустил его вручную, добавив ENTRYPOINT в конец Dockerfile.

ARG ELK_VERSION  
FROM docker.elastic.co/kibana/kibana:${ELK_VERSION}
ENTRYPOINT ["./bin/kibana", "--allow-root"]

Докер-compose.yml

version: '3.2'
# Elastic stack (ELK) on Docker https://github.com/deviantony/docker-elk
services:
  elasticsearch:
    build:
      context: elasticsearch/
      args:
        ELK_VERSION: $ELK_VERSION
    volumes:
      - type: volume
        source: elasticsearch
        target: /usr/share/elasticsearch/data
    ports:
      - "9200:9200"
      - "9300:9300"
    environment:
      ES_JAVA_OPTS: "-Xmx256m -Xms256m"
      ELASTIC_PASSWORD: changeme
      discovery.type: single-node
    networks:
      - elk

  logstash:
    build:
      context: logstash/
      args:
        ELK_VERSION: $ELK_VERSION
    volumes:
      - type: bind
        source: ./logstash/pipeline
        target: /usr/share/logstash/pipeline
        read_only: true
    ports:
      - "5002:5002/tcp"
      - "5002:5002/udp"
      - "9600:9600"
    environment:
      LS_JAVA_OPTS: "-Xmx256m -Xms256m"
    networks:
      - elk
    depends_on:
      - elasticsearch

  kibana:
    build:
      context: kibana/ ##############  Dockerfile ##############
      args:
        ELK_VERSION: $ELK_VERSION
    ports:
      - "5601:5601"
    networks:
      - elk
    depends_on:
      - elasticsearch

networks:
  elk:
    driver: nat

volumes:
  elasticsearch:
person Ali.Asadi    schedule 14.09.2020

Если у вас нет отдельного Dockerfile для Kibana и вы просто хотите установить аргумент запуска в docker-compose, синтаксис будет следующим:

kibana:
    container_name: kibana
    image: docker.elastic.co/kibana/kibana:7.9.2
    ports:
      - 5601:5601
    depends_on:
      - elasticsearch
    environment:
      - ELASTICSEARCH_URL=http://localhost:9200
    networks:
      - elastic
    entrypoint: ["./bin/kibana", "--allow-root"] 

Это решает проблему запуска в контейнере Windows.
При этом я не знаю, почему Kibana не следует запускать от имени пользователя root.

person Bartosz    schedule 27.01.2021