You need to enable JavaScript to run this app. Windows WSL2环境下Docker Compose为MySQL分配静态IP的解决方案
优惠活动
大模型
产品
解决方案
定价
更多

Windows WSL2环境下Docker Compose为MySQL分配静态IP的解决方案

Docker Compose 为MySQL容器配置固定静态IP的实操方案

之前配置不生效、IP冲突的核心原因

  • 你之前尝试的配置直接给Compose自动生成的default网络绑定固定IP,但Compose的默认网络是每次创建项目时动态分配子网段的,没有固定的IP配置规则,你手动指定的172.18.0.3既可能和其他Docker网络的IP段重合引发占用报错,Windows重启后Docker重新分配默认网络子网时,之前指定的IP和实际子网不匹配就会失效,最终出现容器IP每次启动都在172.18.0.3、172.18.0.4之间漂移的问题。
  • 给容器配置固定IP的核心前提,是先创建带有固定子网、固定网关的自定义桥接网络,不能依赖Compose自动生成的默认网络。

具体配置修改步骤

  1. 在docker-compose.yml的顶级层级(和version、services同级)新增自定义网络配置段,提前定义好固定的子网段、网关,选一个当前Docker环境没有被占用的IP段即可(比如避开已经用了的172.18.0.0/16,换成172.20.0.0/16)。

    可以提前用docker network inspect 网络名命令查看现有Docker网络的IP段,避免选到已经被占用的网段引发冲突。

  2. 把所有服务都加入这个自定义网络,不再使用Compose自动生成的默认网络。
  3. 在MySQL服务的配置里,给自定义网络绑定固定的IPv4地址,这个地址必须在你提前定义的子网段范围内。

修改完成后的完整配置参考

version: '3.7'
# 顶级定义自定义固定网络
networks:
  hk-network:
    driver: bridge
    ipam:
      config:
        - subnet: 172.20.0.0/16
          gateway: 172.20.0.1

services:
  nginx:
    container_name: hki_nginx
    image: nginx:latest
    ports:
      - 80:80
      - 4433:443
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf    
      - ./nginx/conf:/etc/nginx/conf.d
      - ./src:/var/www
    links:
      - php
      - php72
    networks:
      - hk-network

  php:
    container_name: hki_php
    image: php:5.6-fpm-ext1
    volumes:
      - ./src:/var/www
      - ./php/php.ini:/usr/local/etc/php/php.ini
      - ./php/php-fpm.conf:/usr/local/etc/php-fpm.d/www.conf
    networks:
      - hk-network

  php72:
    container_name: web_php
    image: php:7.2-fpm-ext2
    volumes:
      - ./src:/var/www
      - ./php72/php.ini:/usr/local/etc/php/php.ini
      - ./php72/php-fpm.conf:/usr/local/etc/php-fpm.d/www.conf
    networks:
      - hk-network

  mysql:
    container_name: hki_mysql
    image: mysql:5.7
    volumes:
      - ./mysql/data:/var/lib/mysql
      - ./mysql/my.cnf:/etc/mysql/conf.d/my.cnf
      - ./mysql/init:/docker-entrypoint-initdb.d/
    ports: 
      - 3306:3306
    environment:
      - MYSQL_ROOT_PASSWORD=*Abcd1234
      - MYSQL_USER=abc
      - MYSQL_PASS=*Abcd1234
    networks:
      hk-network:
        ipv4_address: 172.20.0.3

启动注意事项

  • 第一次启动新配置前,先在配置文件所在目录执行docker-compose down,清理之前项目关联的旧默认网络残留,避免残留网络的IP段和新配置冲突。
  • 如果启动时依然报IP占用错误,执行docker network ls查看现有网络列表,找到占用172.20.0.0/16网段的无用网络,用docker network rm 对应的网络名删除残留后再重新启动。
  • 同一个自定义网络下的容器可以直接通过容器名互相访问,原来配置的links指令可以删除,不会影响服务间的连通性,还能减少冗余配置。
  • Windows环境下的Docker Desktop使用WSL2后端时,自定义桥接网络的子网段是持久化固定的,不会像默认网络那样在系统重启后漂移IP,MySQL绑定的静态IP会长期保持稳定。

内容的提问来源于stack exchange,提问作者hkguile

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.27 02:06:03