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

Mac环境下如何获取docker-client实例?解决TCP转HTTP端口映射异常

解决Docker Remote API调用的invalid scheme异常问题

首先得澄清一个小误解:你提到的「把TCP端口映射为HTTP端口」其实有点混淆概念啦——Docker daemon的2376端口本身就是基于TCP的,但它默认跑的是HTTPS协议,不是HTTP。你用http://开头的URL去访问HTTPS端口,自然会触发invalid scheme异常。

下面给你两个解决方案,按需选择:

方案1:用HTTPS URL + TLS证书调用(推荐,安全)

因为Docker默认在2376端口启用了TLS加密,所以你的docker-client库需要带上证书才能正常连接。从你这个192.168.99.100的地址来看,大概率是docker-machine创建的默认虚拟机节点,证书一般存在~/.docker/machine/machines/default目录下,包含ca.pem、cert.pem、key.pem三个文件。

以Java的docker-client库为例,你需要在初始化客户端时指定证书路径和HTTPS地址:

import com.spotify.docker.client.DefaultDockerClient;
import com.spotify.docker.client.DockerCertificates;
import com.spotify.docker.client.DockerClient;
import java.io.File;

public class DockerExample {
    public static void main(String[] args) throws Exception {
        // 指定证书目录
        DockerCertificates certs = new DockerCertificates(
            new File(System.getProperty("user.home") + "/.docker/machine/machines/default")
        );
        
        // 用https://开头的URI初始化客户端
        DockerClient docker = DefaultDockerClient.builder()
            .uri("https://192.168.99.100:2376")
            .dockerCertificates(certs)
            .build();
        
        // 测试调用,比如获取Docker版本
        System.out.println(docker.version());
        docker.close();
    }
}

其他语言的docker-client库逻辑类似,只要配置好TLS证书和HTTPS地址就能解决scheme不匹配的问题。

方案2:开启Docker daemon的HTTP端口(仅测试用,不安全)

如果只是本地测试,不想折腾证书,可以修改Docker daemon的配置,让它监听一个未加密的HTTP端口(默认是2375):

  1. 找到Docker daemon的配置文件/etc/docker/daemon.json,如果不存在就创建它。
  2. 添加以下配置内容:
{
  "hosts": ["tcp://0.0.0.0:2375", "unix:///var/run/docker.sock"]
}
  1. 重启Docker daemon生效:
brew services restart docker

之后你就可以用http://192.168.99.100:2375来调用Docker Remote API了,不需要证书——但注意这个方式没有加密,绝对不要在生产环境使用!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:39:21