如何使用systemd-nspawn与--network-veth和--port(-n和-p)?

时间:2017-06-02 23:22:38

标签: linux containers systemd-nspawn

我跑了;

systemd-nspawn -bD /path/to/httpd-container

在容器中,httpd有效。但是,从主机访问,它无法访问。另外,以下工作没有网络选项;

-n

我需要使用选项--network-veth-p--port,{{1}}?

1 个答案:

答案 0 :(得分: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(我的公共界面)添加到混音中没有帮助

让我感到困惑的是

我的主机在禁用selinux的情况下运行fedora25;我仍然可以在解雇容器时看到这些消息,我认为这些消息是无关的,但它们是不是?

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