You need to enable JavaScript to run this app. Docker默认桥接网络下容器内IP直连TLS服务报SSL_ERROR_SYSCALL错误
优惠活动
大模型
产品
解决方案
定价
更多

Docker默认桥接网络下容器内IP直连TLS服务报SSL_ERROR_SYSCALL错误

Docker默认桥接网络环境下IP直连TLS服务连接异常问题

核心现象

  • 容器内通过IP+TLS方式访问HTTPS服务时,持续抛出 OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to W.X.Y.Z 报错
  • 相同网络环境下,通过域名访问HTTPS服务流程完全正常
  • 宿主机上无论用域名还是对应IP访问目标HTTPS服务,均可正常完成TLS握手
  • 搭载同版本操作系统、同版本Docker的同事环境,无法复现该问题
  • 已在容器内、宿主机上分别通过tcpdump、Wireshark抓包,未定位到有效线索

已完成的交叉排查测试

  • 更换不同基础镜像(Ubuntu、Alpine)验证问题
  • 更换不同客户端工具(curl、wget)验证问题
  • 调整不同TLS版本参数(TLS1.3、TLS1.2)验证问题

测试基础配置

测试容器构建逻辑

FROM ubuntu:latest
RUN apt update && apt upgrade -y && apt install -y curl tcpdump openssl wget

版本环境明细

  • 容器内工具版本:
    root@ba6f8aab182d:/# openssl version
    OpenSSL 1.1.1f  31 Mar 2020
    root@ba6f8aab182d:/# curl --version
    curl 7.68.0 (x86_64-pc-linux-gnu) libcurl/7.68.0 OpenSSL/1.1.1f zlib/1.2.11 brotli/1.0.7 libidn2/2.2.0 libpsl/0.21.0 (+libidn2/2.2.0) libssh/0.9.3/openssl/zlib nghttp2/1.40.0 librtmp/2.3
    Release-Date: 2020-01-08
    Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp scp sftp smb smbs smtp smtps telnet tftp
    Features: AsynchDNS brotli GSS-API HTTP2 HTTPS-proxy IDN IPv6 Kerberos Largefile libz NTLM NTLM_WB PSL SPNEGO SSL TLS-SRP UnixSockets
    
  • 宿主机Docker版本信息:
    $ docker version
    Client: Docker Engine - Community
     Cloud integration: 1.0.12
     Version:           20.10.5
     API version:       1.41
     Go version:        go1.13.15
     Git commit:        55c4c88
     Built:             Tue Mar  2 20:13:00 2021
     OS/Arch:           darwin/amd64
     Context:           default
     Experimental:      true
    
    Server: Docker Engine - Community
     Engine:
      Version:          20.10.5
      API version:       1.41 (minimum version 1.12)
      Go version:        go1.13.15
      Git commit:        363e9a8
      Built:            Tue Mar  2 20:15:47 2021
      OS/Arch:          linux/amd64
      Experimental:     false
     containerd:
      Version:          1.4.4
      GitCommit:        05f951a3781f4f2c1911b05e61c160e9c30eaa8e
     runc:
      Version:          1.0.0-rc93
      GitCommit:        12644e614e25b05da6fd08a38ffa0cfe1903fdec
     docker-init:
      Version:          0.19.0
      GitCommit:        de40ad0
    
  • 宿主机默认桥接网络配置:
    $ docker network inspect bridge
    [
        {
            "Name": "bridge",
            "Id": "4b8797bccccd628a6280199eb5c0372cd08d521a88a29243b174718569e9cc7e",
            "Created": "2021-04-15T17:24:33.631745871Z",
            "Scope": "local",
            "Driver": "bridge",
            "EnableIPv6": false,
            "IPAM": {
                "Driver": "default",
                "Options": null,
                "Config": [
                    {
                        "Subnet": "172.17.0.0/16",
                        "Gateway": "172.17.0.1"
                    }
                ]
            },
            "Internal": false,
            "Attachable": false,
            "Ingress": false,
            "ConfigFrom": {
                "Network": ""
            },
            "ConfigOnly": false,
            "Containers": {
                "ba6f8aab182daebd4f0b0dc449929585637cd46bc532f61991bfa28c40e09ceb": {
                    "Name": "flamboyant_zhukovsky",
                    "EndpointID": "e29407baf0eb8ac069416a8f787794b548d31f05bf9fb6c223fb58c935aff24c",
                    "MacAddress": "02:42:ac:11:00:02",
                    "IPv4Address": "172.17.0.2/16",
                    "IPv6Address": ""
                }
            },
            "Options": {
                "com.docker.network.bridge.default_bridge": "true",
                "com.docker.network.bridge.enable_icc": "true",
                "com.docker.network.bridge.enable_ip_masquerade": "true",
                "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
                "com.docker.network.bridge.name": "docker0",
                "com.docker.network.driver.mtu": "1500"
            },
            "Labels": {}
        }
    ]
    

复现流程与对应日志

  1. 启动测试容器并进入交互式Shell:docker run -it --rm repro /bin/bash
  2. 容器内通过域名访问HTTPS服务,流程正常,日志片段:
    root@ba6f8aab182d:/# curl -v  https://www.google.com
    *   Trying 172.217.10.36:443...
    * TCP_NODELAY set
    * Connected to www.google.com (172.217.10.36) port 443 (#0)
    * ALPN, offering h2
    * ALPN, offering http/1.1
    * successfully set certificate verify locations:
    *   CAfile: /etc/ssl/certs/ca-certificates.crt
      CApath: /etc/ssl/certs
    * TLSv1.3 (OUT), TLS handshake, Client hello (1):
    * TLSv1.3 (IN), TLS handshake, Server hello (2):
    * TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
    * TLSv1.3 (IN), TLS handshake, Certificate (11):
    * TLSv1.3 (IN), TLS handshake, CERT verify (15):
    * TLSv1.3 (IN), TLS handshake, Finished (20):
    * TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
    * TLSv1.3 (OUT), TLS handshake, Finished (20):
    * SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
    * ALPN, server accepted to use h2
    * Server certificate:
    *  ...
    
  3. 容器内将访问地址替换为域名对应的IP,立刻触发报错,日志片段:
    root@ba6f8aab182d:/# curl -v https://172.217.10.36
    *   Trying 172.217.10.36:443...
    * TCP_NODELAY set
    * Connected to 172.217.10.36 (172.217.10.36) port 443 (#0)
    * ALPN, offering h2
    * ALPN, offering http/1.1
    * successfully set certificate verify locations:
    *   CAfile: /etc/ssl/certs/ca-certificates.crt
      CApath: /etc/ssl/certs
    * TLSv1.3 (OUT), TLS handshake, Client hello (1):
    * OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to 172.217.10.36:443
    * Closing connection 0
    curl: (35) OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to 172.217.10.36:443
    

独立交叉验证结果

  • 容器内执行TLS握手测试命令 openssl s_client -cipher ALL -servername 172.217.10.36:443 -connect 172.217.10.36:443,结果为仅写入403字节客户端报文,未收到任何服务端响应,日志片段:
    root@ba6f8aab182d:/# openssl s_client -cipher ALL -servername 172.217.10.36:443 -connect 172.217.10.36:443
    CONNECTED(00000003)
    write:errno=0
    ---
    no peer certificate available
    ---
    No client certificate CA names sent
    ---
    SSL handshake has read 0 bytes and written 403 bytes
    Verification: OK
    ---
    New, (NONE), Cipher is (NONE)
    Secure Renegotiation IS NOT supported
    Compression: NONE
    Expansion: NONE
    No ALPN negotiated
    Early data was not sent
    Verify return code: 0 (ok)
    
  • 宿主机执行相同的openssl测试命令,可正常完成TLS握手、获取完整服务端证书链,日志片段:
    openssl s_client -cipher ALL -servername 172.217.10.36:443 -connect 172.217.10.36:443
    CONNECTED(00000003)
    depth=2 OU = GlobalSign Root CA - R2, O = GlobalSign, CN = GlobalSign
    verify return:1
    depth=1 C = US, O = Google Trust Services, CN = GTS CA 1O1
    verify return:1
    depth=0 C = US, ST = California, L = Mountain View, O = Google LLC, CN = www.google.com
    verify return:1
    ---
    Certificate chain
     0 s:/C=US/ST=California/L=Mountain View/O=Google LLC/CN=www.google.com
       i:/C=US/O=Google Trust Services/CN=GTS CA 1O1
     1 s:/C=US/O=Google Trust Services/CN=GTS CA 1O1
       i:/OU=GlobalSign Root CA - R2/O=GlobalSign/CN=GlobalSign
    ---
    Server certificate
    -----BEGIN CERTIFICATE-----
    [... certificate was here ...]
    -----END CERTIFICATE-----
    subject=/C=US/ST=California/L=Mountain View/O=Google LLC/CN=www.google.com
    issuer=/C=US/O=Google Trust Services/CN=GTS CA 1O1
    ---
    No client certificate CA names sent
    Server Temp Key: ECDH, X25519, 253 bits
    ---
    SSL handshake has read 3206 bytes and written 339 bytes
    ---
    New, TLSv1/SSLv3, Cipher is ECDHE-RSA-CHACHA20-POLY1305
    Server public key is 2048 bit
    Secure Renegotiation IS supported
    Compression: NONE
    Expansion: NONE
    No ALPN negotiated
    SSL-Session:
        Protocol  : TLSv1.2
        Cipher    : ECDHE-RSA-CHACHA20-POLY1305
        Session-ID: 052A69E409C0705AEAB8A180228C3F8E91A530504EFB06BA9214365F6B99DCAC
        Session-ID-ctx:
        Master-Key: A4EAC218352BBEAF3A43AB625266304DCF495FFE8A916C638679473AD20DC01B508158B8C0AA39A97003FEC5B8ABD7EC
        TLS session ticket lifetime hint: 100800 (seconds)
        TLS session ticket:
        [... a lot of stuff here ...]
        Start Time: 1618514134
        Timeout   : 7200 (sec)
        Verify return code: 0 (ok)
    ---
    

当前需求

暂未定位到问题根因,需要明确可落地的排查思路与解决方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 23:24:00