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)。
这对我有用。
在我的 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)。
这对我有用。