docker 如何修改已运行容器的 mac 地址? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
CRUD
V2EX    Docker

docker 如何修改已运行容器的 mac 地址?

  •  
  •   CRUD 2021-03-05 12:34:24 +08:00 2726 次点击
    这是一个创建于 1755 天前的主题,其中的信息可能已经有所发展或是发生改变。

    已知在容器 run 时可以通过--mac-address指定容器 mac 地址,但已运行的容器如何二次修改使其 mac 地址固定?

    已运行的容器内产生了其他未持久化到宿主机上的数据,所以直接删了重新 run 一个容器比较麻烦。修改containers/{容器 ID}/config.v2.json文件,在Config节点下加入"MacAddress": "xxxxxx",以及修改NetworkSettings节点下的MacAddress的值都没有用,重启后还是分配回了原来的 Mac 。

    3 条回复    2021-03-05 13:57:57 +08:00
    whileFalse
        1
    whileFalse  
       2021-03-05 12:48:28 +08:00   1
    commit 成一个新的镜像,然后重新 run
    或者通过 docker cp 拷贝到新容器中
    gam2046
        2
    gam2046  
       2021-03-05 13:55:08 +08:00
    这种情况比较麻烦,docker 本身设计成无状态,就是为了随时用随时销毁的。

    由于存在了未持久化的数据需要保留,建议将相关内容复制出来后,然后重建容器。

    也就是#1 的第二种方案,至于#1 第一种.....嗯....dirty solution,可以是也可以,如果是抱着”又不是不能用“的想法,这种方案更简单。
    baiyi
        3
    baiyi  
       2021-03-05 13:57:57 +08:00   2
    正常来讲,虚拟网络设备的 mac 地址可以用 ip command 修改,但是在容器内直接操作是不会被允许的,因为有安全问题,会提示“RTNETLINK answers: Operation not permitted”

    所以需要在宿主机上通过 network namespace 来操作。docker 创建的 network namespace 获取比较复杂,不能直接通过 ip netns 获取。

    按步骤来获取 netns:

    1. 查找 docker container pid
    docker inspect -f '{{.State.Pid}}' ${contriner_id}

    2. 创建本机的 netns 目录
    mkdir /var/run/netns

    3. 创建链接
    ln -sfT /pro/${pid}/ns/net /var/run/netns/${container_id}

    4. 查看 netns
    ip netns

    然后就可以通过 ip comnad 修改 mac 地址了,但是我不确定修改后会不会导致其他的问题......

    ip netns exec ${netns_name} ip link set dev eth0 down
    ip netns exec ${netns_name} ip link set dev eth0 address ${new_max_address}
    ip netns exec ${netns_name} ip link set dev eth0 up
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1244 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 23:52 PVG 07:52 LAX 15:52 JFK 18:52
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86