V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
blueboyggh
V2EX  ›  Docker

Ubuntu 20.04 下, Docker 容器如何获取和宿主机同一网段的独立 IP?

  •  
  •   blueboyggh · 2022-03-05 15:16:10 +08:00 · 2785 次点击
    这是一个创建于 981 天前的主题,其中的信息可能已经有所发展或是发生改变。

    网上能找到电视盒子刷了 Armbian 以后使用 macvlan 实现的类似教程,这样可以用 Docker 弄出来一个 OpenWrt 来用,但是 Ubuntu 和 Armbian 的网络管理配置都是不一样的,不知道怎么把教程适配过去,求大神解惑

    18 条回复    2022-03-06 09:00:38 +08:00
    dcty
        1
    dcty  
       2022-03-05 15:19:16 +08:00 via iPhone
    一样的,连教程的命令几乎都一样
    blueboyggh
        2
    blueboyggh  
    OP
       2022-03-05 15:26:19 +08:00
    @dcty 但是 ubuntu 是 netplan 的 yaml 文件配置,armbian 是 /etc/network/interfaces 啊,这能一样吗?
    dcty
        3
    dcty  
       2022-03-05 16:16:35 +08:00 via iPhone
    @blueboyggh 和宿主没关系啊,docker 相关的命令一样的
    blueboyggh
        4
    blueboyggh  
    OP
       2022-03-05 16:23:23 +08:00
    @dcty 用 armbian 的教程,把 docker 容器设置好以后,宿主机是 ping 不同容器的 ip 的,需要在宿主机上做一些设置
    blueboyggh
        5
    blueboyggh  
    OP
       2022-03-05 16:43:43 +08:00
    @dcty 我已经按您说的,按照类似教程弄好了 docker 容器的独立 ip ,现在的问题就是宿主机 ping 不同容器的 ip ,但是局域网里其他的电脑可以,按网上的教程,这个就要编辑 armbian 的 /etc/network/interfaces ,但是 ubuntu 没这玩意啊,不知道怎么把 /etc/network/interfaces 里的命令转换到 netplan 里
    yanyumihuang
        6
    yanyumihuang  
       2022-03-05 17:51:13 +08:00
    //开启混杂模式
    sudo ip link set eth0 promisc on
    //在 etho 上增加接口
    ip link add macnet link eth0 type macvlan mode bridge
    //给接口制定 IP ,最好指定一个空闲 IP
    ip addr add 192.168.2.5/32 dev macnet
    //激活接口
    ip link set macnet up
    //增加一条路由。192.168.2.4 是 openwrt 的 IP
    ip route add 192.168.2.4/32 dev macnet
    上面的规则中的 IP 要根据你自己的情况进行更改
    macnet 是你创建 openwrt 的 docker 时的加入的网络。弄完之后给宿主机指定一个 dns ,223.5.5.5 。这样应该就 OK 了,缺点就是宿主机无法实现无感代理,宿主机访问外网需要手动设置各种代理。
    blueboyggh
        7
    blueboyggh  
    OP
       2022-03-05 18:25:04 +08:00 via Android
    @yanyumihuang 谢谢,我试试
    blueboyggh
        8
    blueboyggh  
    OP
       2022-03-05 19:38:14 +08:00 via Android
    @yanyumihuang 你这个方法,宿主机能 ping 通容器吗?
    yanyumihuang
        9
    yanyumihuang  
       2022-03-05 19:56:38 +08:00
    @blueboyggh 当然了。这个方法缺点就只有我说的那一个:宿主机需要手动设置各种软件的代理
    blueboyggh
        10
    blueboyggh  
    OP
       2022-03-05 20:30:01 +08:00
    @yanyumihuang 直接把宿主机的网关设置成 openwrt 的 ip ,把 openwrt 当做旁路由也可以吧?
    yanyumihuang
        11
    yanyumihuang  
       2022-03-05 20:42:01 +08:00
    @blueboyggh 你可以试试,我这边是不行的
    blueboyggh
        12
    blueboyggh  
    OP
       2022-03-05 20:50:21 +08:00
    @yanyumihuang 好的,知道了,感谢您
    2NUT
        13
    2NUT  
       2022-03-05 20:51:59 +08:00
    docker-compose 里指定 该容器的 network 为 host 模式
    blueboyggh
        14
    blueboyggh  
    OP
       2022-03-05 21:09:02 +08:00
    @2NUT host 模式就和宿主机共用 ip 了吧?没有自己的 ip 吧?
    blueboyggh
        15
    blueboyggh  
    OP
       2022-03-05 21:26:29 +08:00
    @yanyumihuang 测试了一下,确实不行。如果宿主机是 armbian ,按照 https://www.jianshu.com/p/8d4229b087f7 的设置后,docker 的 openwrt 容器就可以作为旁路由使用,您有时间能不能看看这个教程第 7 步的 armbian 配置文件能翻译成 ubuntu 的 yaml 配置吗?
    iBugOne
        16
    iBugOne  
       2022-03-06 05:29:19 +08:00 via Android
    别纠结那么多,直接干掉 netplan ,安装 ifupdown ,你就能用上熟悉的 /etc/network/interfaces 了。

    网络配置方案没有哪个好哪个不好,挑顺手的就行,我装 Ubuntu Server 第一件事就是干掉 snap 和 netplan ,自己动手配 systemd-networkd
    blueboyggh
        17
    blueboyggh  
    OP
       2022-03-06 07:38:10 +08:00 via Android
    @iBugOne 哈哈…感谢…求问怎么干掉 netplan…
    yanyumihuang
        18
    yanyumihuang  
       2022-03-06 09:00:38 +08:00 via Android
    @blueboyggh 我也是东拼西凑的。实力不行,做不到
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1139 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:13 · PVG 02:13 · LAX 10:13 · JFK 13:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.