让你的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 就不用写了

浙公网安备 33010602011771号