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

如何在远程Docker上运行Testcontainers?连接超时问题求助

解决远程Docker服务器上启动Testcontainers容器的连接超时问题

你遇到的System.Net.Sockets.SocketException (10060)是连接超时错误,核心原因是你的代码无法连接到远程服务器的Docker API端口。下面是具体的排查和解决步骤:

1. 先验证基础网络连通性

在本地机器上执行以下命令,确认远程服务器的165.12.3.15:9563端口是否可达:

  • 用telnet:telnet 165.12.3.15 9563
  • 用curl:curl http://165.12.3.15:9563/version

如果命令执行失败,说明网络或端口配置存在问题,优先解决这个。

2. 配置远程Docker开放TCP API端口

Docker默认仅监听本地Unix套接字,不会对外暴露TCP端口,需要修改配置开启:

  • 编辑Docker配置文件:
    • Linux系统:/etc/docker/daemon.json
    • Windows Docker Desktop:C:\ProgramData\Docker\config\daemon.json(或通过桌面设置的"Daemon"标签修改)
  • 添加如下配置(如果文件已有内容,合并hosts字段):
    {
      "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:9563"]
    }
    
    0.0.0.0表示监听所有网卡,也可以指定远程服务器的具体IP。
  • 重启Docker服务:
    • Linux:sudo systemctl restart docker
    • Windows:重启Docker Desktop

3. 开放防火墙/安全组规则

  • 远程服务器本地防火墙要允许9563端口的TCP流量:
    • Linux(ufw):sudo ufw allow 9563/tcp
    • 云服务器(阿里云/腾讯云等):在安全组控制台添加入站规则,允许TCP 9563端口的访问。
  • 确保本地机器到远程服务器的网络没有中间防火墙拦截该端口。

4. 修正Testcontainers代码的细节

  • 你的代码中调用testContainer.StartAsync()没有等待异步操作完成,这可能导致后续逻辑出错,应该使用await:
    public async Task InitializeAsync()
    {
       MsSqlTestcontainer testContainer = new TestcontainersBuilder<MsSqlTestcontainer>()
            .WithDatabase(new MsSqlTestcontainerConfiguration
            {
                Password = "localdevpassword#123"
            })
            .WithDockerEndpoint("tcp://165.12.3.15:9563")
            .WithImage("mcr.microsoft.com/mssql/server")
            .WithCleanUp(true)
            .Build();
       await testContainer.StartAsync();
    }
    
    注意:构造函数不能是异步的,建议把初始化逻辑放到异步方法中调用。
  • 如果远程Docker启用了TLS认证,需要添加TLS配置:
    .WithDockerEndpoint("tcp://165.12.3.15:9563")
    .WithDockerAuthConfig(new DockerAuthConfig
    {
      Tls = true,
      CaCertPath = "/path/to/ca.pem",
      ClientCertPath = "/path/to/cert.pem",
      ClientKeyPath = "/path/to/key.pem"
    })
    

5. 验证配置有效性

完成上述步骤后,再次用curl http://165.12.3.15:9563/version测试,若能返回Docker版本的JSON数据,说明API端口配置正常,此时运行你的Testcontainers代码即可正常连接远程Docker。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 00:52:40