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

.NET Selenium项目在WSL2 Docker容器运行报Cannot assign requested address错误求助

问题解决方向

1 修复Dockerfile依赖安装逻辑

你当前的依赖安装全部写在了build阶段,而最终运行程序的final阶段使用的是纯净的dotnet runtime镜像,完全没有Chrome运行所需的依赖,同时安装Chrome前没有添加官方源也会导致Chrome安装失败,这是触发libgobject-2.0.so.0缺失报错的核心原因。
需要将Chrome及依赖的安装逻辑挪到base阶段(final阶段的基础镜像),同时补全所有Chrome运行必备的依赖包,修正后的Dockerfile参考如下:

FROM mcr.microsoft.com/dotnet/runtime:6.0 AS base
WORKDIR /app
# 安装Chrome及运行所需全量依赖
RUN apt-get update && apt-get install -y \
    wget \
    gnupg2 \
    apt-transport-https \
    && wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | apt-key add - \
    && echo "deb [arch=amd64] https://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list \
    && apt-get update && apt-get install -y \
    google-chrome-stable \
    libglib2.0-0 \
    libnss3 \
    libnspr4 \
    libdbus-1-3 \
    libatk1.0-0 \
    libatk-bridge2.0-0 \
    libcups2 \
    libdrm2 \
    libxcb1 \
    libxkbcommon0 \
    libatspi2.0-0 \
    libx11-6 \
    libxcomposite1 \
    libxdamage1 \
    libxext6 \
    libxfixes3 \
    libxrandr2 \
    libgbm1 \
    libpango-1.0-0 \
    libcairo2 \
    libasound2 \
    && rm -rf /var/lib/apt/lists/*

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["ConsoleApp1/ConsoleApp1.csproj", "ConsoleApp1/"]
RUN dotnet restore "ConsoleApp1/ConsoleApp1.csproj"
COPY . .
WORKDIR "/src/ConsoleApp1"
RUN dotnet build "ConsoleApp1.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "ConsoleApp1.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "ConsoleApp1.dll"]

2 修正Chrome启动参数

Cannot assign requested address [::1]:39307报错是因为Chrome默认尝试绑定ipv6的本地回环地址,多数容器环境默认未开启ipv6支持,同时容器内默认缺少沙箱权限,需要补充对应的启动参数适配容器环境。
修正后的代码参考如下:

using OpenQA.Selenium.Chrome;

namespace IntroSelenium
{
    class Program
    {
        static void Main(string[] args)
        {
            var chromeOptions = new ChromeOptions();
            chromeOptions.AddArguments("headless=new"); // 新版无头模式兼容性更好
            chromeOptions.AddArguments("--no-sandbox"); // 容器环境必须关闭沙箱
            chromeOptions.AddArguments("--disable-dev-shm-usage"); // 避免容器共享内存不足
            chromeOptions.AddArguments("--disable-ipv6"); // 禁用ipv6解决地址绑定错误
            chromeOptions.AddArguments("--remote-debugging-address=0.0.0.0"); // 允许所有网卡访问调试端口
            // 指定系统安装的Chrome路径,避免Selenium查找失败
            chromeOptions.BinaryLocation = "/usr/bin/google-chrome-stable";
            using (ChromeDriver driver = new ChromeDriver(chromeOptions))
            {
                // 业务逻辑
            }
        }
    }
}

额外注意:你使用的Selenium.WebDriver.ChromeDriver Nuget包版本需要和容器内安装的google-chrome-stable大版本保持一致,否则会出现兼容性报错。

3 WSL2 Docker可选检查

如果修改完上述两项仍有端口绑定问题,可以检查Docker Desktop的ipv6配置,不需要使用ipv6的话保持默认关闭即可,配合代码中的--disable-ipv6参数即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 22:57:02