docker push to registry不起作用

时间:2015-11-14 19:58:05

标签: docker boot2docker dockerfile docker-registry devops

当我尝试推送到之前创建的注册表时,我遇到了问题。以下是我遵循的步骤。

docker run -d -p 5001:5002 --restart=always --name new_registry registry:2

docker build -t test-app .

docker run -p 50100:8080 -d --name app test-app
docker tag test-app localhost:5001/test:latest
docker push localhost:5001/test:latest

=============================================== ==

 ✘  ~/G/S/d/a/App   master   docker push localhost:5001/test:latest
The push refers to a repository [localhost:5001/test] (len: 1)
Sending image list
Put http://localhost:5001/v1/repositories/test/: net/http: transport closed before response was received

以下是docker images命令的输出:

  ~/G/S/d/a/App   master   docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
test-app              latest              78f9362f7cd5        51 minutes ago      547.8 MB
localhost:5001/test   latest              78f9362f7cd5        51 minutes ago      547.8 MB
registry              2                   5d165b8e4b20        3 weeks ago         220.1 MB

以下更多详情:

 ~/G/S/d/a/patterns_and_tools  docker-machine env default
set -x DOCKER_TLS_VERIFY "1";
set -x DOCKER_HOST "tcp://192.168.yyy.xxx:2376";
set -x DOCKER_CERT_PATH "/Users/zack/.docker/machine/machines/default";
set -x DOCKER_MACHINE_NAME "default";
# Run this command to configure your shell:
# eval (docker-machine env default)
 ~/G/S/d/a/patterns_and_tools 

我检查了VM中的网络设置。它们如下:

名称:dockersetting 协议:TCP 主机IP: 主机端口:50100 GuestIP: 访客港口:50100

1 个答案:

答案 0 :(得分:1)

标记boot2docker(即使它已被docker machine淘汰)意味着您不是直接使用Linux,而是使用Linux VM在Windows或Mac上。

您在issue 523 docker/distribution(新注册服务器)中报告了类似的错误消息

  

当您绑定到容器内的localhost时,即使您指定了端口映射,该服务也不会在容器外部可用。   当docker守护进程连接时,它无法连接到端口,因为该服务未绑定到" external"容器的界面。

这意味着您需要设置port forwarding, or to use the docker-machine ip new_registry ip address

docker push $(docker-machine ip new_registry):5001/test:latest
  

5000:5000有效,但5001:5002在创建注册表时不起作用。

VM可能已设置为端口转发端口5000,但不是5001(类似于this picture)。

这意味着 registry image exposes port 5000 :您可以在主机端口5000或5001或您想要的任何端口上映射它:但它必须是您映射的端口5000:

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