Перед прочтением настоящей статьи рекомендуется ознакомиться со статьей Инструкция для работы с редактором nano.
Данная статья применима к:
- Astra Linux Special Edition
Описание
При использовании docker совместно с включенной службе межсетевого экрана firewalld после переключения службы docker в изолированный режим нарушается работа службы docker с сетью. Признаки: служба docker не запускается, в журнале /var/log/syslog фиксируется ошибка вида "Error initializing network controller".
Такое поведение службы docker, работающей в изолированном режиме, следует из выполнения требования безопасности: изолированная служба не может вмешиваться в работу высокоцелостных служб, одной из которых является служба firewalld. Для преодоления этого ограничения необходимо выполнить действия от имени администратора (при включенном МКЦ — от имени администратора с высоким уровнем целостности), определив для изолированной службы разрешенные действия.
Рекомендации
Если требуется одновременно использовать межсетевой экран firewall и службу docker, работающую в изолированном режиме, то необходимо выполнить следующие действия:
- Запретить службе docker пытаться изменить настройки межсетевого экрана, для чего к опциям запуска службы добавить опцию --iptables=false. Порядок действий:
- Выполнить команду:sudo systemctl edit docker
- Ввести в пустые строки после второй строки следующий текст:Важно: строка
[Service] ExecStart= ExecStart=/usr/sbin/dockerd -H fd:// \ --iptables=false \ --containerd=/var/run/containerd/containerd.sock \ --pidfile /var/run/docker/docker.pid \ $DOCKER_OPTS --exec-opt native.cgroupdriver=cgroupfsExecStart=(присваивающая пустое значение) необходима.
При этом пример текста без дополнительной опции будет доступен в комментариях. - Сохранить изменения. См. Инструкция для работы с редактором nano.
- Запустить (перезапустить) службу docker:sudo systemctl restart docker
- Выполнить команду:
- Если контейнерам требуются сетевые подключения, то добавить настройку этих подключений:
- Определить адреса используемых службой docker сетей. По умолчанию docker использует Например, с помощью команды:ip addr show docker0В выводе команды выше показано, что docker использует сеть 172.17.0.1/16. Это сеть docker, использующаяся по умолчанию, и эта сеть далее используется в примере настройки.
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:36:0a:e2:62 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever - Выполнить команду:sudo systemctl edit docker
- Дополнить ранее введенные строки следующими строками:При этом первые 4 строки неизменны, последняя строка определяет перенаправление пакетов на адрес конкретного контейнера (в примере — 172.17.0.2:80). Такие строки по мере надобности необходимо будет добавить для всех сетевых интерфейсов всех контейнеров, которым требуются сетевые подключения..
ExecStartPost=sysctl -w net.ipv4.ip_forward=1 ExecStartPost=iptables -t nat -A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE ExecStartPost=iptables -A FORWARD -i docker0 -o eth0 -j ACCEPT ExecStartPost=iptables -A FORWARD -i eth0 -o docker0 -m state --state RELATED,ESTABLISHED -j ACCEPT ExecStartPost=iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 172.17.0.2:80
В итоге текст должен выглядеть так (для краткости приведены первые строки): - Сохранить изменения.
- Запустить (перезапустить) службу docker:sudo systemctl restart docker
- Определить адреса используемых службой docker сетей. По умолчанию docker использует Например, с помощью команды: