You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WSL2下Docker Compose因IP动态变化导致服务间无法访问问题

解决方案

1. 最简方案:直接使用服务名作为访问地址

Docker Compose 会自动为同一个项目下的所有服务创建专用的默认桥接网络,内置DNS服务会自动把服务名解析为对应容器的动态IP,你完全不需要手动获取、配置Redis的IP地址。

你直接修改customscript.js里的Redis连接地址,把主机地址填redis-service即可,端口还是默认的6379,示例连接写法:

// 示例Redis连接配置
const redis = require('redis')
const client = redis.createClient({
  host: 'redis-service', // 直接填compose里的Redis服务名
  port: 6379
})

这个方案不需要修改任何compose配置,也不需要自定义网络、host模式之类的额外操作。

2. 你之前遇到的报错原因及修复方法

自定义网络报错的修复

service "redis-service" refers to undefined network "network-name": invalid compose project 报错是因为你只在服务配置里引用了网络,没有在compose文件根级声明该网络,正确配置示例:

version: '3.7'

# 根级声明自定义网络
networks:
  network-name:
    driver: bridge

services:
  redis-service:
    image: redis
    container_name: redis-cont                
    ports:
      - "6379" 
    # 关联自定义网络
    networks:
      - network-name
      
  serviceA:
    depends_on:
      - redis-service
    container_name: serviceA-cont    
    build:
      context: ./app
      dockerfile: Dockerfile
    command: scripts/customscript.js
    ports:
      - "8080:8080"
    stdin_open: true
    # 关联自定义网络
    networks:
      - network-name

配置后同一个自定义网络下的服务依然可以通过服务名互相访问,和默认网络逻辑一致。

host模式报错的修复

network mode "network-name" not supported by buildkit 报错是因为你把network_mode的值填成了自定义网络名,正确的host模式配置应该是network_mode: "host",不过WSL2环境下并不推荐用host模式,会破坏容器的网络隔离性,远不如直接用服务名解析方便。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 16:24:02