摘要
我在默认端口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系统会干扰本地连接,特别是如果它可以远程工作?
我是否错过了阻止注册表在本地访问的内容?
答案 0 :(得分:0)
不需要挂载点-v
来存储本地目录中的文件,如:
docker run -d -p 5000:5000 -v $HOME/registry:/var/lib/registry registry:2
这样,它使用容器中/var/lib/registry
的主目录中的注册表文件夹,默认情况下,容器中的注册表将存储文件。