收起左侧

让容器获取独立物理ip地址

0
回复
304
查看
[ 复制链接 ]

0

主题

0

回帖

0

牛值

江湖小虾

2025-9-6 22:02:24 显示全部楼层 阅读模式
  1. 查看物理机上的网卡名称:
    使用sh命令:ip addr查看本地网络接口名称,找到物理网卡名称,如下图:
    a9ca4129-3303-44b3-a95b-b2725bf8101b.png

  2. 使用macvlan模式创建一个容器网络模式:

    1. 创建ipv4网络命令:
sudo docker network create -d macvlan  \
--subnet=192.168.10.0/24   \ # 物理机所在局域网网段,就是容器所在的物理机上的IP地址所属的网段
--gateway=192.168.10.1 \  #   局域网网段网关
--ip-range=192.168.10.160/29 \ #允许这个新创建的名字为pyslocal的网络分配的局域网ip地址范围,“/29”掩码表示这个pyslocal 网络具有局域网的8个ip地址的分配权,从160到167,实际能分配6个,也就是161到166.
-o parent=enp2s0 pyslocal  # enp2s0 就是容器所在物理机物理网卡的名称,pyslocal  就是创建的容器网络的名称
2. 创建开启ipv6网络的命令:
sudo docker network create -d macvlan \
   --subnet=192.168.10.0/24 \
   --gateway=192.168.10.1 \
   --ip-range=192.168.10.160/29 \
   --ipv6 \
   --subnet=abcd:efgh:hijk:lmno::/64 \  # 这个地址要从你的局域网路由器上找了,我这里随便诌了个地址
   --ip-range=abcd:efgh:hijk:lmno:1234:5678:9123:4569/125 \ # 这个根据subnet的值,自己设置一个把,我这里随便诌了个地址。不知道怎么算可以问问豆包,“/125”这个掩码也是用来规定新创建的网络pyslocalv6预先支配的ip地址范围。这里的例子是从4569地址开始。
   -o parent=enp2s0  pyslocalv6

注意:如果上面的两端创建网络的命令运行时出现错误,也可能时命令的文本格式不对,ssh执行时有点严格。

容器网络创建完毕之后,使用该网络的容器都会获得一个和物理机同网段的ip地址。

另外,如果你想多个容器公用一个局域网ip地址的话,可以使用容器附加网络,就是使用另一个容器的网络作为本容器的网络,具体例子(dlts-net和dlts-tr两个服务都是使用161这个局域网ip地址):

services:
  dlts-net: # 这个容器就是用来被其他容器共享网络的,当然你也可以用一个有实用意义的容器
    image: library/alpine:latest
    container_name: DLTS-NET
    command: tail -f /dev/null
    networks:
      pyslocalv6:  # 引用外部创建的网络
        ipv4_address: 192.168.10.161  # 确保在pyslocalv6的IPv4运行的范围内,且要根据自己的局域网网段设置
        ipv6_address: abcd:efgh:hijk:lmno:1234:5678:9123:4570  # 确保在IPv6的/125范围内,诌的值,不可直接用
    ports:
      - "9091:9091"
    restart: always
    sysctls:
      - net.ipv6.conf.all.disable_ipv6=0  # 启用IPv6 
  # Transmission容器 (4.0.5版本)
  dlts-tr:
    image: linuxserver/transmission:4.0.5
    container_name: DLTS-TR
    network_mode: "service:dlts-net"  # 共享dlts网络
    environment:
      - PUID=0  # 替换为你的用户ID
      - PGID=0  # 替换为你的组ID
      - TZ=Asia/Shanghai
      - TRANSMISSION_DOWNLOAD_DIR=/downloads/transmission
      - TRANSMISSION_INCOMPLETE_DIR=/incomplete/transmission
      - TRANSMISSION_WATCH_DIR=/watch/transmission
      - TRANSMISSION_WEB_HOME=/trguing-web-v1.3.0-zh-240607a
    volumes:
      - ./Tr-Seed/config:/config
      - ./Tr-Seed/trguing-web-v1.3.0-zh-240607a:/trguing-web-v1.3.0-zh-240607a
      # 文件目录 在下载器中具体配置下载文件夹 
      - /vol2/1000/Media:/Media
    restart: always
    depends_on:
      - dlts-net
networks:
  pyslocalv6:  # 声明使用外部已创建的网络
    external: true  # 关键:表示该网络由外部手动创建,Compose不管理其生命周期
收藏
送赞
分享

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则