无法将docker镜像推送到本地OpenShift Origin注册表

Lex*_*ick 7 docker openshift-origin

目标是能够在我的笔记本电脑上获取Docker镜像并将其推送到OpenShift Origin图像注册表(启动oc cluster up)以进行本地开发.目前尚不清楚我是在做错事还是在Docker或OpenShift Origin中存在错误.对于那些不熟悉OpenShift Origin的人:

https://github.com/openshift/origin/blob/master/docs/cluster_up_down.md

任何有启发性的信息将不胜感激.这是我到目前为止所尝试的:

# oc cluster up
Starting OpenShift using openshift/origin:v3.6.0 ...
OpenShift server started.

The server is accessible via web console at:
    https://127.0.0.1:8443

You are logged in as:
    User:     developer
    Password: <any value>

To login as administrator:
    oc login -u system:admin

# docker container ls | fgrep origin-docker-registry
9de6bb0cdd28        openshift/origin-docker-registry   "/bin/sh -c '/usr/..."

# docker inspect 9de6bb0cdd28 | fgrep DOCKER_REGISTRY_PORT
                "DOCKER_REGISTRY_PORT_5000_TCP_PROTO=tcp",
                "DOCKER_REGISTRY_PORT=tcp://172.30.1.1:5000",
                "DOCKER_REGISTRY_PORT_5000_TCP_PORT=5000",
                "DOCKER_REGISTRY_PORT_5000_TCP_ADDR=172.30.1.1",
                "DOCKER_REGISTRY_PORT_5000_TCP=tcp://172.30.1.1:5000",

# oc whoami -t
qH2cTKtIpr1QB1dMw10ffiDGX1iH_uocrtXaFPyTei8    

# docker login -u developer -p qH2cTKtIpr1QB1dMw10ffiDGX1iH_uocrtXaFPyTei8 172.30.1.1:5000
Login Succeeded

# docker tag alpine:latest 172.30.1.1:5000/alpine:latest

# docker push 172.30.1.1:5000/alpine:latest
The push refers to a repository [172.30.1.1:5000/alpine]
5bef08742407: Preparing 
error parsing HTTP 400 response body: unexpected end of JSON input: ""
Run Code Online (Sandbox Code Playgroud)

我知道跑阿尔卑斯山不会产生任何有趣的东西.无论我试图推送什么图像,结果都是一样的.登录似乎确实有效.如果我删除或更改令牌的任何部分,登录将失败.我正在运行的Docker版本:

# docker version
Client:
 Version:      17.06.0-ce
 API version:  1.30
 Go version:   go1.8.3
 Git commit:   02c1d87
 Built:        Fri Jun 23 21:31:53 2017
 OS/Arch:      darwin/amd64

Server:
 Version:      17.06.0-ce
 API version:  1.30 (minimum version 1.12)
 Go version:   go1.8.3
 Git commit:   02c1d87
 Built:        Fri Jun 23 21:51:55 2017
 OS/Arch:      linux/amd64
 Experimental: true
Run Code Online (Sandbox Code Playgroud)

sol*_*ysh 4

正如格雷厄姆上面指出的那样,您可以公开注册表,但这不是必需的。

在您使用内部 IP 的情况下,docker Push 命令docker push 172.30.1.1:5000/alpine:latest不正确。无论哪种情况(外部路由或内部 IP),内部注册表都会根据图像命名空间和名称为您创建适当的图像流。图像流的名称及其命名空间/项目取自推送。这意味着您需要确保使用 3 个元素标记图像:

  • docker注册表IP和端口(外部路由或内部IP)
  • 您的用户有权访问的命名空间/项目(如果是oc cluster up myproject您的用户有权访问的默认名称空间/项目)
  • 最后是图像流名称

在您的情况下,docker Push 应该如下所示docker push 172.30.1.1:5000/myproject/alpine:latest