Назад | Перейти на главную страницу

Докер создает фиктивный интерфейс Ethernet

Можно ли создать фиктивный интерфейс Ethernet с помощью сборки Docker ниже, это фрагмент из журналов сборки DockerFile.

   Step 14/17 : run sudo ip link add dummy0 type dummy && sudo ip addr add 192.168.10.12/24 dev dummy0 && sudo ip link set dummy0 up
     ---> Running in 21c388505e28
    RTNETLINK answers: Operation not permitted

Мне удалось создать фиктивный интерфейс, запустив изображение в привилегированном режиме. Приведенные ниже команды использовались для создания фиктивного интерфейса.

$ ip link add eth_dummy type dummy
$ ip addr add 172.16.1.1/24 dev eth_dummy
$ ip link set eth_dummy up

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

В docker build command не имеет возможности запускать привилегированные команды или изменять возможности встроенных контейнеров, используемых во время сборки. Процесс построения образа предназначен для переносимости, запуска на разных хостах, возможно, в облаке, где серверы не доверяют создаваемому образу.

Выполнять это во время сборки образа тоже не имеет смысла. Результатом команды сборки являются изменения файловой системы, хранящиеся в виде слоев наложенной (обычно) файловой системы. Изменения в сети будут потеряны, если вы попытаетесь запустить тот же образ на другом узле. Если эти изменения изолированы от сети контейнеров, они будут потеряны в конце шага RUN, прежде чем будет выполнен следующий шаг файла Dockerfile.

Вместо этого рассмотрите возможность перемещения логики в точку входа, которая запускается при запуске контейнера.

Вам нужно запустить контейнер докеров с опцией: --cap-add=NET_ADMIN. (ссылка)