Можно ли создать фиктивный интерфейс 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
. (ссылка)