Docker (Spotify) API - 无法连接到 Docker

Docker (Spotify) API - cannot connect to Docker

在我的 Docker(Spring 引导)应用程序中,我想执行 Docker 命令。我使用 docker-spotify-api(客户端)。

我收到不同的连接错误。我将应用程序作为 docker-compose.yml 的一部分启动。

这是我目前在 EC2 AWS 上尝试过的 VPS:

docker = DefaultDockerClient.builder()
  .uri(URI.create("tcp://localhost:2376"))
  .build();
=> TCP protocol not supported. 

docker = DefaultDockerClient.builder()
  .uri(URI.create("tcp://localhost:2375"))
  .build();
=> TCP protocol not supported. 

docker = new DefaultDockerClient("unix:///var/run/docker.sock");
==> No such file

docker = DefaultDockerClient.builder()
          .uri("unix:///var/run/docker.sock")
          .build();
==> No such file

docker = DefaultDockerClient.builder()
            .uri(URI.create("http://localhost:2375")).build();
or
docker = DefaultDockerClient.builder()
            .uri(URI.create("http://localhost:2376")).build();
or 
docker = DefaultDockerClient.builder()
              .uri(URI.create("https://localhost:2376"))
              .build();
==> Connect to localhost:2376 [localhost/127.0.0.1] failed: Connection refused (Connection refused)

这是我在 EC2 上的环境 VPS:

$ ls -l /var/run
lrwxrwxrwx 1 root root 6 Nov 14 07:23 /var/run -> ../run

$ groups ec2-user                              
ec2-user : ec2-user adm wheel systemd-journal docker   

$ ls -l /run/docker.sock                       
srw-rw---- 1 root docker 0 Feb 14 17:16 /run/docker.sock

echo $DOCKER_HOST $DOCKER_CERT_PATH
(empty)

这种情况类似于https://github.com/spotify/docker-client/issues/838#issuecomment-318261710

您在主机上使用 docker-compose 来启动您的应用程序;在容器内,Spring 启动应用程序正在使用 docker-spotify-api.

你可以尝试在你的 compose 文件中挂载 /var/run/docker.sock:/var/run/docker.sock。

您的 DOCKER_HOST 和 DOCKER_CERT_PATH 环境变量值是多少。

尝试以下 docker-客户端使用 HTTP 远程 API

与本地 Docker 守护程序通信
    final DockerClient docker = DefaultDockerClient.builder()
      .uri(URI.create("https://localhost:2376"))
      .build();

请同时验证 docker.sock 的权限是否对您的应用程序可见,并检查您的 docker 服务是否 运行 是否如上图所示 docker.sock看起来是空的,但如果服务是 运行,它应该包含 pid

如@Benjah1 所示,/var/run/docker.sock 必须先安装。

要在 docker-compose / Docker Swarm 环境中这样做,您可以这样做:

volumes:
  - /var/run/docker.sock:/var/run/docker.sock

此外,其他选项导致错误,因为 Docker 的默认设置是它不会打开 tcp/http 个连接。当然,您可以更改此设置,但风险很小。

我花了一些时间才弄清楚,但我是 运行 https://hub.docker.com/r/alpine/socat/ 本地,并且还想连接到我的 Docker 守护程序但不能(同样的错误) .然后它让我震惊:该网页上的解决方案使用 127.0.0.1 作为要绑定的 ip 地址。相反,使用 0.0.0.0 启动该容器,然后在您的容器中,您可以这样做:DockerClient dockerClient = new DefaultDockerClient("http://192.168.1.215:2376");(当然使用您自己的 ip-address)。

这对我有用。