2017-08-10 73 views
4

我們的目標是能夠承擔我的筆記本電腦泊塢窗圖像,並將其推到OpenShift產地圖像註冊表(由oc cluster up開始)做地方發展。目前還不清楚我是否做錯了什麼,或者Docker或OpenShift Origin中存在錯誤。對於那些不熟悉OpenShift產地:無法碼頭工人形象推到本地OpenShift產地註冊表

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: "" 

我知道運行高山不會產生任何有趣的事情。無論我嘗試推送什麼圖像,結果都是一樣的。登錄似乎實際上工作。如果我刪除或更改了令牌的任何部分,則登錄失敗。我正在運行的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 

回答

3

您可以像格雷厄姆指出,上述暴露註冊表,但這不是必需的。

在使用內部IP的情況下,docker push命令docker push 172.30.1.1:5000/alpine:latest不正確。 在任何情況下(外部路由或內部IP),內部註冊表將基於圖像名稱空間和名稱爲您創建適當的圖像流。圖像流的名稱和名稱空間/項目,取自推送。這意味着你需要確保你標記的圖像有3個要素:

  • 泊塢窗註冊表的IP和端口(外部路由或內部IP)
  • 命名空間/項目中的用戶可以訪問(在oc cluster upmyproject情況在默認的用戶可以訪問)
  • 最終圖像流名稱

在你的情況下,泊塢窗推應該是這樣的:docker push 172.30.1.1:5000/myproject/alpine:latest

+1

正是我想念的。謝謝! –

2

當嘗試推送docker映像時,可能會有一些問題可能會產生影響。

在我們開始之前說,通常的方式給訪問內部圖像註冊表將使用的路線來揭露它。由於使用IP只適用於oc cluster up,因此會顯示如何使用路由,這種方式更通用。

oc cluster up,你可以運行:使用

http://docker-registry-default.127.0.0.1.nip.io/ 

下一頁登錄內部圖像註冊表:

oc expose svc/docker-registry -n default --as system:admin 

這將創建一個URL,在內部圖像註冊表

docker login -u developer -p `oc whoami -t` http://docker-registry-default.127.0.0.1.nip.io:80/ 

請確保您使用:80的URL,當你登錄。如果內部圖像註冊表是使用安全的路線暴露,將改用:443代替:80

接下來,您要標記的圖像,但千萬要小心你有標記它,因爲你想在應添加圖像流的項目名稱。

docker tag alpine:latest docker-registry-default.127.0.0.1.nip.io:80/myproject/alpine 

看我怎麼包含在標籤myproject,因爲這是我想它在最終項目

詳細信息:

再次使用:80爲名稱中的端口。登錄時需要URL中的端口,即使給出http,也可能是3.6.0或docker命令行客戶端中的錯誤。他們此時對OpenShift Online提到了這一點,它使用的是3.6.0。

現在可以把圖像:

docker push docker-registry-default.127.0.0.1.nip.io:80/myproject/alpine 

全部指令的順序是:

$ oc expose svc/docker-registry -n default --as system:admin 
route "docker-registry" exposed 

$ docker login -u developer -p `oc whoami -t` http://docker-registry-default.127.0.0.1.nip.io:80/ 
Login Succeeded 

$ docker tag alpine:latest docker-registry-default.127.0.0.1.nip.io:80/myproject/alpine 

$ docker push docker-registry-default.127.0.0.1.nip.io:80/myproject/alpine 
The push refers to a repository [docker-registry-default.127.0.0.1.nip.io:80/myproject/alpine] 
5bef08742407: Layer already exists 
latest: digest: sha256:471fd6e70d36b9c221f76464d0a9ff78392ccee359da351ebfec45138fb40f9b size: 528 

$ oc get is 
NAME  DOCKER REPO      TAGS  UPDATED 
alpine 172.30.1.1:5000/myproject/alpine latest 10 seconds ago 
+0

謝謝您的詳細解釋! –

相關問題