标签: macvlan

docker macvlan - 没有到主机(容器)的路由

我试图了解 docker 的“macvlan”网络。我创建一个新网络:

docker network create -d macvlan \
  --subnet=192.168.2.0/24 \
  --gateway=192.168.2.1 \
  -o parent=eno1 \
  pub_net
Run Code Online (Sandbox Code Playgroud)

并使用新网络启动新容器:

docker run --rm -d --net=pub_net --ip=192.168.2.74 --name=whoami -t jwilder/whoami
Run Code Online (Sandbox Code Playgroud)

当我尝试从容器访问服务或 ping 它时,我得到:

curl: (7) Failed to connect to 192.168.2.74 port 8000: no route to host
Run Code Online (Sandbox Code Playgroud)

使用 Ubuntu 16.04、Ubuntu 18.04 和 CentOS 7 进行测试。docker 主机本身或网络上的其他客户端都无法访问容器。

我按照 docker 站点的示例进行操作:https://docs.docker.com/network/network-tutorial-macvlan/#bridge-example

我缺少什么?

我在这里读到了在 Docker macvlan 中绑定地址来执行这些命令(不知道它们做了什么):

docker run --rm -d --net=pub_net --ip=192.168.2.74 --name=whoami -t jwilder/whoami
Run Code Online (Sandbox Code Playgroud)

但这对我的机器没有任何作用

networking containers routes docker macvlan

10
推荐指数
1
解决办法
1万
查看次数

无法通过 macvlan 网络从主机访问 docker 容器

在我的 Linux 网络中,我无法通过专用的 macvlan 网络从运行它们的主机访问我的 docker 容器。与此 macvlan 网络的所有其他连接都正常。

所以基本上设置是:

DOCKER1       eth0  172.0.0.1 (default)
  |           eth1  10.0.0.1  (macvlan)
  CONTAINER1        10.0.0.11 (macvlan)

DOCKER2       eth0  172.0.0.2 (default)
  |           eth1  10.0.0.2  (macvlan)
  CONTAINER2        10.0.0.12 (macvlan)
Run Code Online (Sandbox Code Playgroud)
  • 主机 DOCKER1 无法访问 CONTAINER1
  • 主机 DOCKER2 无法访问 CONTAINER2
  • 主机 DOCKER1 可以到达 DOCKER2
  • 主机 DOCKER1 可以到达 CONTAINER2
  • 主机 DOCKER2 可以到达 DOCKER1
  • 主机 DOCKER2 可以到达 CONTAINER1
  • 所有容器可以相互到达
  • 物理网络中的所有其他设备都可以访问所有
  • 都可以到达网关/互联网

如何让主机通过 macvlan 网络访问自己的容器?

我需要特定的应用程序来通过这个网络进行交互,所以使用docker exec不能解决我的问题;)。

networking docker macvlan

9
推荐指数
2
解决办法
5785
查看次数

容器内的 Docker Macvlan 网络无法连接到自己的主机

我在 2 个 docker 主机之间设置了 Macvlan 网络,如下所示:

主机设置:HOST_1 ens192: 172.18.0.21

创建 macvlan 网桥接口

docker network  create  -d macvlan \
--subnet=172.18.0.0/22 \
--gateway=172.18.0.1 \
--ip-range=172.18.1.0/28 \
-o macvlan_mode=bridge \
-o parent=ens192 macvlan
Run Code Online (Sandbox Code Playgroud)

创建 macvlan 接口 HOST_1

ip link add ens192.br link ens192 type macvlan mode bridge
ip addr add 172.18.1.0/28 dev ens192.br
ip link set dev ens192.br up
Run Code Online (Sandbox Code Playgroud)

主机设置:HOST_2 ens192: 172.18.0.23

创建 macvlan 网桥接口

docker network  create  -d macvlan \
--subnet=172.18.0.0/22 \
--gateway=172.18.0.1 \
--ip-range=172.18.1.16/28 \
-o macvlan_mode=bridge \
-o parent=ens192 …
Run Code Online (Sandbox Code Playgroud)

docker docker-swarm macvlan

8
推荐指数
3
解决办法
9655
查看次数

如何使用 Compose 创建具有用户定义的 IP 和 MAC 地址的 Docker macvlan

我有一个使用 MAC 地址执行硬件许可证的 Docker 项目。我无法更改此设置,ISV 使用包含 MAC 地址的硬件指纹。

我正在尝试创建一个 macvlan 网络,它将使用物理适配器并从我的网络 DHCP 服务器获取 IP 地址,或者我将手动分配静态 IP 地址。我必须能够手动设置 MAC 地址,这样它就不会动态更改并使我的许可证密钥失效。

根据 Docker 文档,该mac_address设置已被弃用,至少在 v3 模式中是这样,但在 v2 模式中似乎受到尊重。

我有一个使用普通 LSIO Nginx 作为测试来构建的配置,但无法运行并出现错误,指出无法分配 MAC 地址。

version: "2.1"

services:
  nginx:
    image: linuxserver/nginx
    container_name: nginx_macvlan
    environment:
      - TZ=Americas/Los_Angeles
    volumes:
      - .mount:/config
    ports:
      - 80:80
      - 443:443
    restart: unless-stopped
    mac_address: b7-48-d5-a6-d1-99
    networks: 
      nginx_vlan:
        ipv4_address: 192.168.1.10

networks:
  nginx_vlan:
    driver: macvlan
    ipam:
      driver: default
      config:
        - subnet: 192.168.1.0/24
Run Code Online (Sandbox Code Playgroud)
PS C:\Users\piete\source\TestMacVlan> cd "c:\Users\piete\source\TestMacVlan"
PS C:\Users\piete\source\TestMacVlan> docker-compose -f …
Run Code Online (Sandbox Code Playgroud)

docker docker-compose macvlan

8
推荐指数
1
解决办法
4万
查看次数

Docker:无法删除 macvlan 配置网络

使用portainer,我创建了一个macvlan 配置网络。现在,我想删除这个网络。但是,由于某种原因,我不能。我确实收到以下错误消息:Error response from daemon: error while removing network: configuration network "my_macvlan_config" is in use。奇怪的是,我不认为网络正在使用中。没有容器连接到它。检查网络时,我得到以下结果:

~$ sudo docker network inspect my_macvlan_config
[
    {
        "Name": "my_macvlan_config",
        "Id": "5d95270684516484632c4505e15ba8253bbe8d780b2c41a84a07fbbe09d7a9b6",
        "Created": "2020-05-18T20:59:03.472260896+02:00",
        "Scope": "local",
        "Driver": "null",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "192.168.13.0/24",
                    "IPRange": "192.168.13.200/29",
                    "Gateway": "192.168.13.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": true,
        "Containers": {},
        "Options": {
            "parent": "eth0"
        },
        "Labels": {}
    }
]
Run Code Online (Sandbox Code Playgroud)

Docker …

docker macvlan

7
推荐指数
0
解决办法
1886
查看次数

docker容器如何与主机通信?

主机ip:192.168.123.2网关:192.168.123.1

适配器是enp3s0,所以我在主机中创建了一个docker网络:

docker network create -d macvlan --subnet 192.168.123.0/24 --gateway 192.168.123.1 -o parent=enp3s0 -o macvlan_mode=bridge macnet
Run Code Online (Sandbox Code Playgroud)

运行容器集IP

docker run --net macnet --ip 192.168.123.102 --name hd3  -it  ubuntu bash
Run Code Online (Sandbox Code Playgroud)

容器和主机ping网关192.168.123.1都工作.
但是在容器和主机之间不起作用.

容器:
ping网关正常
ping主机不正常

主机:
ping网关
没问题ping容器不行

为什么以及如何在docker容器和主机之间进行通信?

docker docker-swarm macvlan

6
推荐指数
1
解决办法
1085
查看次数

通过特定物理接口的docker网络

所以我试图创建一个网络(docker network create),以便其流量将通过特定的物理网络接口(NIC);我有两个:(<iface1>内部)和<iface2>(外部)。

我需要两个网卡的流量在物理上分开。


方法一

我认为macvlan应该使用驱动程序来创建这样的网络。对于我在互联网上找到的大部分内容,解决方案参考 Pipework(现已弃用)和临时 docker-plugins(也已弃用)。对我最有帮助的是这个1

docker network create -d macvlan \
    --subnet 192.168.0.0/16 \
    --ip-range 192.168.2.0/24 \
    -o parent=wlp8s0.1 \
    -o macvlan_mode=bridge \
    macvlan0
Run Code Online (Sandbox Code Playgroud)

然后,为了使容器从主机可见,我需要在主机中执行以下操作:

sudo ip link add macvlan0 link wlp8s0.1 type macvlan mode bridge
sudo ip addr add 192.168.2.10/16 dev macvlan0
sudo ifconfig macvlan0 up
Run Code Online (Sandbox Code Playgroud)

现在容器和主机可以看到对方:)但是容器无法访问本地网络。这个想法是容器可以访问互联网。


方法2

因为我将手动使用<iface2>,所以如果默认情况下流量通过 ,我就可以了<iface1>。但无论我以何种顺序启动网卡(我也尝试暂时删除 LKM <iface2>);整个流量总是被外部网卡超过<iface2>。我发现这种情况发生是因为路由表在某个“随机”时间自动更新。为了强制流量通过<iface1>,我必须(在主机中):

sudo route del -net …
Run Code Online (Sandbox Code Playgroud)

networking nic docker docker-network macvlan

5
推荐指数
1
解决办法
2万
查看次数

Docker-在容器中组合多个MAC地址

我正在尝试找到一种方法来运行 2 个服务,这些服务在我的 SmartThings 集线器(cast-web-api 和 MQTT-Bridge)上使用 MAC 地址作为唯一的网络 ID

现在,我构建了一个 docker-compose.yml 文件来满足我的需要,但我想将我的 eth0 桥接到容器上的 2 个不同的 MAC 地址。目标是保持 DHCP 并将我路由器中的静态 IP 分配给“Mac1”“Mac2”。

我正在使用 Docker 版本 19.03.1 和 docker-compose 版本 1.24.1

我尝试过,但没有成功使用“mac_address:”还尝试使用该界面运行界面和使用该界面的构建,例如: 这篇文章

到目前为止我的文件(版本 1)

mqtt:
    image: arm32v6/eclipse-mosquitto
    volumes:
        - ./mosquitto/config:/mosquitto/config
        - ./mosquitto/data:/mosquitto/data
        - ./mosquitto/log:/mosquitto/log
    ports:
        - "1883:1883"

mqttbridge:
    image: st_mqtt_bridge
    volumes:
        - ./mqtt-bridge:/config
    ports:
        - "8082:8082"
    links:
        - mqtt

cast-web-api:
    image: cast-web-api
    volumes:
        - ./cast-web/config:/config
    ports:
        - "3000:3000"

Run Code Online (Sandbox Code Playgroud)

有可能实现我之前描述的吗?也许 Macvlan 桥接?我是否需要将 docker-compose 升级到版本 2 或 3 ?

raspberry-pi raspbian docker docker-compose macvlan

5
推荐指数
0
解决办法
543
查看次数

Docker MACVLAN 仅适用于出站

我正在尝试为我的 docker 容器设置 MACVLAN。我安装了全新的 Raspbian 和 Docker,并按照 Docker 文档中概述的步骤创建了 MACVLAN: https: //docs.docker.com/network/network-tutorial-macvlan

网络如下所示:

[
    {
        "Name": "pub_net",
        "Id": "782c49f79f549b11f04a6df98b8b2cbf52deef072e036306231309e44a1c9f3a",
        "Created": "2020-02-25T14:44:12.105402396+01:00",
        "Scope": "local",
        "Driver": "macvlan",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "192.168.178.0/24",
                    "Gateway": "192.168.178.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "682a47a60a5478d19b8c6fc923e11c949f70c5c07fe4dc8d94a772524c2820a1": {
                "Name": "IoBroker",
                "EndpointID": "5e7068dd9330792a91e1f1f023bd052d91d1fa93f50a2eb670ef8be81b61587f",
                "MacAddress": "02:42:c0:a8:b2:02",
                "IPv4Address": "192.168.178.2/24",
                "IPv6Address": ""
            }
        },
        "Options": {
            "parent": "eth0"
        },
        "Labels": {} …
Run Code Online (Sandbox Code Playgroud)

linux docker raspberry-pi3 macvlan raspbian-buster

5
推荐指数
1
解决办法
7372
查看次数