我对(主机)VLAN接口上的docker网络有疑问。
我尝试通过VLAN网络从docker容器ssh到服务器,但无法建立连接(超时)。
我有两台机器(让我们称之为服务器和笔记本电脑)通过
连接我尝试使用私有网络从笔记本电脑上的容器连接到服务器
wireshark(在笔记本电脑vlan接口上监听)告诉我发送了一个[SRV]包,服务器用[SRV,ACK]响应。然而,容器似乎没有收到这个,导致服务器的[SRV,ACK]重新传输,也从容器重新传输到新的[SRV]包。
我启动了nginx
容器侦听0.0.0.0
(在所有接口上) - 可以从公共网络访问,但不能从私人网络
我在笔记本电脑上本地安装了nginx
,再次监听所有界面。它可通过两个网络访问,私有和公共。
所以问题似乎与“docker和vLANs”有关:wireshark还建议“传出”是可能的,但“传入”不是。
有什么想法吗?
答案 0 :(得分:2)
目前,最好的选择是使用(当前)实验性功能“Ipvlan Network”。
Linux实现非常轻量级,因为相反 与使用传统的Linux网桥隔离相比,它们很简单 与Linux以太网接口或子接口相关联以强制执行 网络之间的分离以及与物理网络的连接。
documentation非常大,无法在此复制,但是,一旦安装了实验版本,要创建ipvlan网络并运行附加到它的容器,您应该运行:
Ipvlan
docker network create -d ipvlan \ --subnet=192.168.1.0/24 \ --gateway=192.168.1.1 \ -o ipvlan_mode=l2 \ -o parent=eth0 db_net
在db_net网络上启动容器
docker run --net=db_net -it --rm alpine /bin/sh
在该页面上还有更多内容需要阅读。
很少注意到:
-o ipvlan_mode=
默认为L2模式(如果未指定)
容器无法 ping基础主机接口,因为它们被Linux有意过滤以进行额外隔离。
实验意味着它被认为还没有为生产做好准备,可能会有一些错误。该文档指出它“在沙盒环境中提供测试和评估。”