@minotavr1712

Как правильно запустить контейнер от имени другого пользователя?

Есть файл docker-compose.yml
version: '2.4'

services:
  filebeat:
    image: docker.elastic.co/beats/filebeat:7.7.0
    container_name: filebeat
    restart: always
    entrypoint: bash -c 'export PATH=$PATH:/usr/share/filebeat && /usr/local/bin/docker-entrypoint -e'
    environment:
      LOGSTASH_HOST: "logstash:9600"
    volumes:
      - '/home/elkf_adm/files/test.log:/logs_to_parse/test.log'
      - '/var/run/docker.sock:/var/run/docker.sock:ro'
      - '/var/lib/docker/containers:/var/lib/docker/containers:ro'
      
      - '/home/elkf_adm/configs/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro'
    ports:
      - '5044:5044'
    networks:
      - elk

volumes:
  elastic_data: {}

networks:
  elk:


Его надо запускать от имени elkf_adm (uid=1002, gid=1002)
Когда пытаюсь запустить от этого пользователя, то выводится Exiting: error loading config file: config file ("filebeat.yml") must be owned by the user identifier (uid=1000) or root, поскольку на хосте изменил владельца и группу с vagrant (uid=1000) на elkf_adm
Видел, что можно добавить user: "1002:1002". Временно удалил лишнее и запускаю файл:
version: '2.4'
services:
  filebeat:
    image: docker.elastic.co/beats/filebeat:7.7.0
    container_name: filebeat
    restart: always
    user: "1002:1002"

В результате выводится ошибка "filebeat | /usr/local/bin/docker-entrypoint: line 8: exec: filebeat: not found"
Как только я удаляю user: "1002:1002"

docker-compose.yml
version: '2.4'
services:
  filebeat:
    image: docker.elastic.co/beats/filebeat:7.7.0
    container_name: filebeat
    restart: always

То все запускается
Но если подключить вольюмы, то опять будет требовать смены владельца
Как более правильно решить эту проблему?
  • Вопрос задан
  • 823 просмотра
Решения вопроса 1
@mureevms
Его надо запускать от имени elkf_adm (uid=1002, gid=1002)

Его не надо запускать от этого имени. Системный пользователь не при чем. Все дело в правах на файлы в файловой системе.

Смотря на сборку этого имаджа видно, что в 11 и 13 строках создается группа filebeat с GID 1000 и пользователь filebeat с UID 1000. Еще раз обращаю внимание, это не относится к системному пользователю, которй запускает контейнер, это пользователь внутри контейнера. В 12-й строке создаются каталоги и назначается владельцем root:filebeat, т.е. пользователь root и группа filebeat. Ранее при создани пользователя уже видели, что пользователь filebeat добавляется в группу filebeat. И в 14 строке указывается пользователь от которого будет запускаться сам демон. А раз демон работает от него, то и права на файлы у него должны быть.

Добавление user: "1002:1002" не поможет, потому что внутри контейнера нет пользователя с такими ID.

Решить можно рекурсивной сменой владельца chown 0:1000 /path/ -R по каталогам, которые биндятся к контейнеру
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Drno
Пользователя в группу докер засунуть
Дать права на папки которые в volume монтируешь
Дать права на каталог с yml и сам файл
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы