1

在我的 Docker (Spring Boot) 应用程序中,我想执行 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)
4

4 回答 4

1

正如@Benjah1 所指出的, /var/run/docker.sock 必须首先安装。

要在 docker-compose / Docker Swarm 环境中执行此操作,您可以执行以下操作:

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

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

于 2019-05-02T16:34:54.480 回答
1

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

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

您可以尝试在撰写文件中安装 /var/run/docker.sock:/var/run/docker.sock 。

于 2019-05-01T17:09:46.663 回答
0

我花了一些时间才弄清楚,但是我在本地运行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 地址)。

这对我有用。

于 2020-08-04T09:22:30.103 回答
0

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

在 docker-client 使用 HTTP 远程 API 与本地 Docker 守护进程通信时尝试以下操作

    final DockerClient docker = DefaultDockerClient.builder()
      .uri(URI.create("https://localhost:2376"))
      .build();

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

于 2019-05-01T17:35:37.767 回答