Вопрос или проблема
ОС: CentOS 7
Это вопрос, который граничит с двумя проблемами. У меня работает машина docker
, где я недавно установил контейнер PLEX от linuxserver/plex
. Текущая проблема заключается в том, что я не могу получить доступ к сайту для настройки PLEX https://localhost:32400/web
. В попытках выяснить, почему это происходит, я заметил, что порт 32400
оказался закрытым, даже несмотря на то, что он должен был быть открыт при создании контейнера, я использую сетевой хост.
Я попытался проверить, смогу ли я получить доступ к сайту, используя curl
curl -i http://localhost:32400
curl -i http://10.0.1.200:32400
Затем я проверил открытые порты с помощью NMAP
#nmap 10.0.1.200
Starting Nmap 6.40 ( http://nmap.org ) at 2019-01-18 12:52 CST
Nmap scan report for 10.0.1.200
Host is up (0.00049s latency).
Not shown: 999 closed ports
PORT STATE SERVICE
22/tcp open ssh
Nmap done: 1 IP address (1 host up) scanned in 0.10 seconds
Таким образом, явно порт 32400 не открыт, поэтому я перешел в firewall-cmd
#sudo firewall-cmd --get-active-zones
public
interfaces: eno1
#sudo firewall-cmd --zone=public --add-port=32400/tcp --permanent
success
#sudo firewall-cmd --reload
success
Я также проверил, открыт ли он
#sudo firewall-cmd --zone=public --list-ports
32400/tcp
Однако NMAP по-прежнему показывает, что он закрыт. Есть идеи, почему firewalld показывает открытый порт на хосте docker, но он на самом деле закрыт? Я даже не уверен, что это запустит сайт для Plex.
Подтверждение того, что Крамер предположил, что, возможно, мой интерфейс не был настроен
# ip addr
3: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 10.0.1.200/24 brd 10.0.1.255 scope global noprefixroute dynamic eno1
#firewall-cmd --zone=public --list-interfaces
eno1
убедитесь, что сетевой интерфейс успешно добавлен в зону “public”, обычно только сетевая карта по умолчанию добавляется (например, eth0).
Чтобы добавить интерфейс в зону:
#firewall-cmd --permanent --zone=public --add-interface=<interface_name>
Чтобы узнать, какие интерфейсы у вас есть, попробуйте:
#ipaddr
ИЛИ
#ifconfig
добавьте интерфейс, предоставляющий IP 10.0.1.200
В будущем, публикуя команды, которые вы выполняете, пожалуйста, также публикуйте вывод команды, это поможет понять и устранить проблему.
Надеюсь, это поможет 🙂
Ответ или решение
Чтобы разобраться с проблемой недоступности порта 32400 на вашем сервере CentOS 7 при использовании Plex в контейнере Docker, выполните следующие шаги.
Во-первых, вы уже правильно идентифицировали, что порт 32400, необходимый для работы Plex, не открыт, даже несмотря на попытки открыть его через firewalld
. Однако следует учесть несколько моментов:
-
Проверка конфигурации сети Docker: Поскольку вы используете host-сеть для Docker, контейнер должен иметь возможность прослушивать все открытые порты на хосте. Убедитесь, что контейнер Plex действительно настроен с использованием опции
--network host
. Вы можете проверить настройки контейнера с помощью команды:docker inspect <container_id>
Убедитесь, что конфигурация сети соответствует вашим ожиданиям.
-
Проверка службы Plex внутри контейнера: Убедитесь, что Plex действительно стартует и прослушивает нужный порт внутри контейнера. Для этого подключитесь к контейнеру:
docker exec -it <container_id> /bin/bash
И выполните команду:
netstat -tuln | grep 32400
Это поможет определить, работает ли на самом деле Plex на ожидаемом порту.
-
Перепроведение проверки с помощью
firewalld
: Вы правильно добавили порт 32400 в список открытых портов для зоныpublic
, но это может не полностью решить проблему. Чтобы убедиться в правильности настроек, выполните следующие команды:sudo firewall-cmd --zone=public --list-all
Убедитесь, что интерфейс
eno1
действительно привязан к зонеpublic
и что порт 32400 отображается в списке. -
Обновление и рестарт
firewalld
и Docker: Попробуйте перезапустить службы для обновления состояния сетевых правил:sudo systemctl restart firewalld sudo systemctl restart docker
Это может помочь применить все изменения в конфигурации.
-
Углубленная диагностика с мостом и контейнеризацией: Если все указанные шаги выполнены, а проблема остается, проверьте на уровне ядра маршрутизацию и правила iptables, чтобы убедиться, что ничего не блокирует трафик.
Если после выполнения всех вышеуказанных рекомендаций проблема сохраняется, подумайте о том, чтобы обратиться к более глубоким журнальным логам системы или использовать утилиты типа tcpdump
для анализа трафика и выявления проблемы.
Эти шаги помогут вам детально разобрать и решить вопрос с недоступностью портов, следуя лучшим практикам администрирования систем на основе Docker и CentOS.