让你的docker容器拥有独立的ip,再也不用管端口冲突了

我有好几个 mysql 的 docker 容器,但是都想用 3306 端口,如何实现,分配各自的ip即可

步骤一:创建 macvlan 网络

docker network create -d macvlan \
  --subnet=192.168.100.0/24 \
  --gateway=192.168.100.1 \
  -o parent=enp3s0 \
  r68s-macvlan

parent 是物理网卡的名字,其他就是子网、网关那些了,最后一个参数是网络名称,下面的 compose 配置会用到

 步骤二:docker-compose 示例

services:

  dji-mysql:
    image: mysql:8.0.26
    container_name: dji-mysql
    volumes:
      - ./mysql/data:/var/lib/mysql
    command: --lower_case_table_names=1
    environment:
      - TZ=Asia/Shanghai
      - MYSQL_ROOT_PASSWORD=Super@em,5
    mem_limit: 512m
    restart: on-failure:3
    privileged: true
    networks:
      r68s-macvlan:
        ipv4_address: 192.168.100.110
  
  dji-minio:
    image: minio/minio:RELEASE.2025-04-22T22-12-26Z
    container_name: dji-minio
    restart: on-failure:3
    environment:
      TZ: Asia/Shanghai
      # 访问密钥(用户名),至少3个字符
      MINIO_ROOT_USER: admin
      # 密钥(密码),至少8个字符
      MINIO_ROOT_PASSWORD: Super@em,5
    volumes:
      # 持久化存储卷,映射到宿主机的./minio/data目录
      - ./minio/data:/data
    command: server /data --console-address ":9001"
    networks:
      r68s-macvlan:
        ipv4_address: 192.168.100.111
  
  dji-redis:
    container_name: dji-redis
    image: redis:6.2
    environment:
      - TZ=Asia/Shanghai
    mem_limit: 256m
    restart: on-failure:3
    volumes:
      - ./redis/redis-data:/data
      - ./redis/redis.conf:/etc/redis/redis.conf
    command: redis-server /etc/redis/redis.conf
    networks:
      r68s-macvlan:
        ipv4_address: 192.168.100.112

  dji-emqx:
    image: emqx/emqx:4.4.19
    container_name: dji-emqx
    restart: on-failure:3
    environment:
      - TZ=Asia/Shanghai
    volumes:
      # 只挂载数据目录,配置文件使用容器默认
      - ./emqx/data:/opt/emqx/data
    networks:
      r68s-macvlan:
        ipv4_address: 192.168.100.113

networks:
  r68s-macvlan:
    external: true
    name: r68s-macvlan

ipv4_address 就是各自容器要占用的 ip,ports 就不用写了 

 

posted @ 2026-01-16 13:51  Nihaorz  阅读(0)  评论(0)    收藏  举报