Как использовать systemd-nspawn с --network-veth и --port ( -n и -p)?
Я бегу;
systemd-nspawn -n -p 80:80 -bD /path/to/httpd-container
В контейнере работает httpd. Однако доступ к хосту не дает доступа. Кроме того, ниже работает без параметров сети;
systemd-nspawn -bD /path/to/httpd-container
Что мне нужно, чтобы использовать опцию -n
, --network-veth
а также -p
, --port
?
1 ответ
Тот же вопрос здесь; чтобы помочь другим размножаться с нуля:
подготовка
вытащить мирское изображение из интернета
machinectl pull-raw --verify=no https://download.fedoraproject.org/pub/fedora/linux/releases/25/CloudImages/x86_64/images/Fedora-Cloud-Base-25-1.3.x86_64.raw.xz
Тест 1
Запустить сервер внутри контейнера без возможности подключения к сети
systemd-nspawn -M Fedora-Cloud-Base-25-1.3.x86_64.raw nc -l localhost 10000
в другом окне
echo hello | nc localhost 10000
работает
Тест 2
Включение частной сети и сопоставление портов, чтобы порт 10000 хоста был сопоставлен с портом 20000 контейнера
systemd-nspawn -M Fedora-Cloud-Base-25-1.3.x86_64.raw --private-network -p 10000:20000 nc -l localhost 20000
но потом
echo hello | nc localhost 10000
результаты в
Ncat: Connection refused.
Почему это неправильно
Я бы почти ожидал совершенно противоположных результатов; в любом случае второй тест - это тот случай использования, который я хотел бы получить на работе. Мне действительно нужно, чтобы мои контейнеры были изолированы от сети, и в любом случае мне нужно перенаправление портов, поскольку все контейнеры работают на одном и том же порту, который необходимо перенаправить на ряд портов на стороне хоста.
Что я пробовал
Добавление опции --network-interface=eno1
(мой публичный интерфейс) к миксу не помогло
Что меня озадачивает
Мой хост запускает fedora25 с отключенным selinux; Тем не менее я вижу эти сообщения при стрельбе из контейнера, которые, как я понимаю, не связаны, но так ли это?
mount(/tmp/nspawn-root-tR1Tr0/sys/fs/selinux) failed, ignoring: No such file or directory
mount(/tmp/nspawn-root-tR1Tr0/sys/fs/selinux) failed, ignoring: Invalid argument