Разрешения серого журнала на основе Docker

#docker #file-permissions #permission-denied #user-permissions #graylog

#docker #файл-разрешения #в разрешении отказано #пользователь-разрешения #серый журнал

Вопрос:

У меня есть следующее docker-compose.yml (слегка измененное, но скопированное отсюда):

 version: '2'
services:
  mongodb:
    image: mongo:3
    volumes:
      - /storage/mongo_data:/data/db
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch-oss:6.6.1
    volumes:
      - /storage/es_data:/usr/share/elasticsearch/data
    environment:
      - http.host=0.0.0.0
      - transport.host=localhost
      - network.host=0.0.0.0
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    mem_limit: 1g
  graylog:
    image: graylog/graylog:3.0
    volumes:
      - /storage/graylog_journal:/usr/share/graylog/data/journal
    environment:
      - GRAYLOG_PASSWORD_SECRET=somepasswordpepper
      - GRAYLOG_ROOT_PASSWORD_SHA2=8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
      - GRAYLOG_HTTP_EXTERNAL_URI=http://127.0.0.1:9000/
    links:
      - mongodb:mongo
      - elasticsearch
    depends_on:
      - mongodb
      - elasticsearch
volumes:
  mongo_data:
    driver: local
  es_data:
    driver: local
  graylog_journal:
    driver: local
  

Проблема в том, что когда я запускаю его с docker-compose , происходит сбой, поскольку обе службы graylog и elasticsearch не имеют доступа к /storage/graylog и /storage/elasticsearch соответственно. Что мне нужно изменить, так это сделать:

  • chmod 1000:1000 -Rv /storage/elasticsearch
  • chmod 1100:1100 -Rv /storage/graylog

на главном компьютере.

Итак, возникают два вопроса:

  • почему это?
  • как с этим элегантно справиться?

Ответ №1:

Elasticsearch и Graylog оба не запускаются от имени root внутри своего контейнера.

Именно по этой причине их пользователю / группе требуется доступ к файловой системе на хосте, если вы монтируете ее в контейнер.

Комментарии:

1. Хорошо, спасибо. Как я могу обработать это в моем docker-compose, чтобы оно запускалось «из коробки»?

2. с помощью docker это невозможно сделать.

Ответ №2:

Файл compose создает тома для данных, но контейнеры их не используют!

Оригинал:

 volumes:
  - graylog_journal:/usr/share/graylog/data/journal
  

Ваши изменения:

 volumes:
  - /storage/graylog_journal:/usr/share/graylog/data/journal
  

Это создаст каталог данных в вашей хост-системе и будет в ваших руках.