【问题标题】:Docker (Spotify) API - cannot connect to DockerDocker (Spotify) API - 无法连接到 Docker
【发布时间】:2019-09-17 08:40:45
【问题描述】:

在我的 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)

【问题讨论】:

    标签: docker amazon-ec2 docker-api spotify-docker-client


    【解决方案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。

    【讨论】:

    • Trivial:我当然安装了 Docker。在 VPS 上没有安装 docker 的情况下如何运行 docker-compose?
    • github.com/spotify/docker-client/issues/… 会是这样吗?您是否在主机上使用 docker-compose 来启动堆栈?在容器内,Spring Boot 应用程序正在使用 docker-spotify-api?
    • 不是堆栈,只是 docker-compose。我可以在 1 个 ec2 aws 上放一个堆栈吗?我想关于安装 docker.sock 的建议会解决这个问题!请倾倒作为答案。
    • 更新了我的答案。我被提到了解决方案堆栈 (en.wikipedia.org/wiki/Solution_stack)。我假设 docker-compose 文件中有多个组件。像ELK栈、LAMP栈一样,可以把栈放在1个aws ec2上。我不是指“码头工人栈”。
    【解决方案2】:

    正如@Benjah1 所指出的,/var/run/docker.sock 必须先挂载。

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

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

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

    【讨论】:

      【解决方案3】:

      您的 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

      【讨论】:

      • Tx,但没有帮助。 DOCKER_HOST 和 DOCKER_CERT_PATH 环境变量都是空的。
      • 您的 docker 服务器正在运行?在使用 docker 客户端连接之前,请检查 Docker 服务是否应该在您的系统上运行
      【解决方案4】:

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

      这对我有用。

      【讨论】:

        猜你喜欢
        • 2015-05-19
        • 2018-10-02
        • 1970-01-01
        • 2021-01-02
        • 2016-12-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-12
        相关资源
        最近更新 更多