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

#docker #docker-compose #dhcp

Вопрос:

Поэтому я кодирую свой собственный dhcp-сервер для конкретной работы и хочу развернуть его с помощью docker. Мне нужно открыть его на порту 67/udp и использовать хост network_mode. Я попытался настроить свою докер-композицию следующим образом.

 version: '3'

services:
  dhcp:
    container_name: custom_dhcp_server
    image: registry.patty.com/custom_dhcp_server:latest
    restart: always
    command: python3 -u src/dhcp_server.py
    ports: 
      - "67:67/udp"
    network_mode: "host"
 

но я только что обнаружил, что не могу открыть порт с хостом network_mode. Итак, как я могу развернуть его с помощью docker.

Комментарии:

1. Пользователи, не являющиеся администраторами/суперпользователями, не могут открывать порты ниже 1024.

2. @LMC, но если вы используете Docker, вы root.

3. Служба Docker на уровне операционной системы запускается root, но экземпляры docker должны запускаться как можно чаще непривилегированным пользователем.

Ответ №1:

но я только что обнаружил, что не могу открыть порт с хостом network_mode.

Хотя это правда, это потому, что в этом нет необходимости. Когда вы работаете в пространстве имен сети хоста, вам не нужно использовать сопоставление портов, потому что любой порт, который вы прослушиваете, является портом хоста. Пока ваш пользовательский DHCP-сервер прослушивает UDP-трафик на порту 67, все готово.

Если что-то не работает, вы можете попробовать выполнить ряд диагностических шагов.

  • Что произойдет, если вы запустите нестандартный dhcp-сервер? dnsmasq хорош для этого, потому что его относительно просто настроить.
  • Добавьте код отладки на свой пользовательский dhcp-сервер. Получает ли он какие-либо запросы?
  • Проверьте свой брандмауэр; есть ли вероятность, что вы блокируете запросы dhcp?

И т.д.