无法让Docker Registry在本地工作,远程工作

时间:2018-01-09 07:36:22

标签: linux docker debian docker-registry

摘要

我在默认端口5000上运行的Debian主机上设置了一个注册表容器。

Debian主机在VMWare系统之上作为虚拟机运行。 5000港口开放。

docker run -d -p 5000:5000 --name registry --restart=always registry:2

然后我标记了一个图像以推送到注册表

docker tag test-image localhost:5000/kp/testing:1.0.0

并尝试推动它

docker push localhost:5000/kp/testing:1.0.0

但它失败了Get http://localhost:5000/v2/: net/http: request canceled (Client.Timeout exceeded while awaiting headers)

注册表容器的输出显示为空。好像请求永远不会到达它。

我尝试了什么

然后我尝试cURL _catalog端点,它只是在接收响应头时卡住,连接本身似乎成功。

curl -v http://localhost:5000/v2/_catalog
*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 5000 (#0)
> GET /v2/_catalog HTTP/1.1
> Host: localhost:5000
> User-Agent: curl/7.52.1
> Accept: */*
>

我还尝试在主机上为注册表创建主机名,并将其设置为注册表连接地址,但结果相同。

此外,我还尝试将主机名添加到insecure-registries中的/etc/docker/daemon.json数组中,但仍以相同的错误结束。

然后我尝试使用自签名证书使用TLS进行设置。同样,连接似乎在cURL中建立,但没有收到响应头。

远程工作

出于好奇,我尝试远程访问它,所以我使用Debian主机IP查找相同的地址并且它有效!

curl -v http://<host-ip>:5000/v2/_catalog
*   Trying <host-ip>...
* TCP_NODELAY set
* Connected to <host-ip> (<host-ip>) port 5000 (#0)
> GET /v2/_catalog HTTP/1.1
> Host: <host-ip>:5000
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Content-Type: application/json; charset=utf-8
< Docker-Distribution-Api-Version: registry/2.0
< X-Content-Type-Options: nosniff
< Date: Tue, 09 Jan 2018 07:30:30 GMT
< Content-Length: 20
<
{"repositories":[]}

提问

在Debian本地工作似乎真的不切实际,因为我已经在MacOS和Arch Linux机器上使用localhost进行了设置。我不认为VMWare系统会干扰本地连接,特别是如果它可以远程工作?

我是否错过了阻止注册表在本地访问的内容?

1 个答案:

答案 0 :(得分:0)

不需要挂载点-v来存储本地目录中的文件,如:

docker run -d -p 5000:5000 -v $HOME/registry:/var/lib/registry registry:2

这样,它使用容器中/var/lib/registry的主目录中的注册表文件夹,默认情况下,容器中的注册表将存储文件。