Назначение дополнительных возможностей с помощью файла Docker - PullRequest
0 голосов
/ 12 июня 2018

Мне нужно развернуть образ Docker, но я хочу использовать только команду запуска Docker без использования каких-либо ее аргументов.

Я хочу назначить специальное разрешение при запуске контейнера.

Это моя команда запуска Docker:

docker run --cap-add SYS_ADMIN --cap-add DAC_READ_SEARCH ping

Но я просто хочу использовать только:

docker run ping

Какие изменения я должен сделать в моем файле Docker?Я не могу использовать Docker Compose (не мой вариант использования).

Мой файл Docker:

My Docker file is

Ответы [ 3 ]

0 голосов
/ 08 августа 2018

Вы не можете этого сделать.Изображение не может предоставлять себе повышенные привилегии для управления системой, в которой оно работает;это может сделать только администратор, фактически выполняющий docker run.

Лучше обернуть это чем-то вроде файла YAML Docker Compose или сценария оболочки, который включает все необходимые docker run аргументы.

Если вы пытаетесь создать «вспомогательную команду» через Docker, стоит запомнить две вещи.Во-первых, каждый, кто может запускать команды Docker, имеет неограниченные привилегии root для хоста ;очень трудно помешать кому-либо docker run -v /:/host -u root ... и получить неограниченный доступ к файловой системе хоста.Другое заключается в том, что существует множество таких опций Docker (включая настройку переменных среды, монтирование томов и порты публикации), которые устанавливаются чрезвычайно регулярно, поэтому трудно создать образ, в котором только docker run imagename сам по себе выводит изображение с полнымфункциональность.

0 голосов
/ 18 февраля 2019

Если в системе существует группа docker , возможно, вам не нужно использовать команду sudo .Как описано в по этой ссылке , добавьте группу docker и добавьте своего пользователя в группу.Это позволит избежать использования sudo .Я только что проверил другие привилегированные команды, и они работали без каких-либо проблем для меня.Повторите шаги, описанные в приведенной выше ссылке:

sudo groupadd docker
sudo usermod -aG docker $USER

Демон Docker должен быть перезапущен для выполнения вышеприведенного действия или перезапустить компьютер.

Кстати,Насколько я знаю, в центре вашего вопроса лучший вариант - запустить с помощью скрипта оболочки.Это хороший подход, описанный ранее, но я бы написал другой, который позволяет передавать произвольные параметры и является более общим для любой команды, которая может вам понадобиться.

Файл: privileged-wrapper.sh

#!/bin/bash
IMAGE_NAME="your_image_name"
BINARY="$0"
BINARY="${BINARY#./}"
docker run --cap-add SYS_ADMIN --cap-add DAC_READ_SEARCH --rm "$IMAGE_NAME" "$BINARY" "$@"

И теперь вы можете создавать столько символических ссылок, сколько команд необходимо для этих возможностей (имейте в виду, что имя символической ссылки - это команда, запускаемая в контейнер).Ожидается, что команда, которая будет запущена, найдена в PATH .

chmod a+x privileged-wrapper.sh
ln -svf privileged-wrapper.sh ping

Наконец, просто запустите:

./ping -c 10
0 голосов
/ 12 июня 2018

Напишите скрипт типа /usr/local/sbin/docker-ping.sh:

#!/bin/sh

docker run --cap-add SYS_ADMIN --cap-add DAC_READ_SEARCH ping

Затем другой скрипт, /usr/local/bin/docker-ping:

#!/bin/sh

sudo /usr/local/sbin/docker-ping.sh

И, наконец, измените sudo соответствующим образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...