天天看點

docker registry v2 配置 (REGISTRY_PROXY_REMOTEURL) 解釋 + docker push 動作簡析

<a href="http://dockerone.com/uploads/article/20160302/da7d8411c2061a32065b7d2040bce1e5.png" target="_blank"></a>

<a href="http://dockerone.com/uploads/article/20160302/665a9b6d8b131914a1df33b36863bea1.png" target="_blank"></a>

啟動參數

1、大緻問了下,如果不加認證,push是沒有問題的,是以先确定了裸registry是沒有問題的;

2、看了下參數,似乎沒什麼特别的配置,覺得應該不會有啥問題(好尴尬);

3、看了下push的時候的報錯是個unsupported,好吧,報錯的似乎不知道為啥,像是異常沒擷取到,來了個通量的;

4、看了下日志,這算是一套push(認證 push)完整的流程,但是出現了"405 78" 的狀态,405權限問題,似乎有點頭緒了(這裡被這種報錯誤影響了好久好久);

備注:auth server 可以參考開頭的連接配接中部落格的認證服務,用的就是那個

好了,405是個突破口了,似乎說明auth server那裡出了點狀況,

1、于是乎手動調取了下auth server的API,token是可以拿到的,ok,auth server最起碼是理人的;

2、405權限呐,于是對着auth server的ACL檔案是配了又配:

①:确定是否能用,我把admin的密碼改了,然後docker login 不進去,確定能讀取config

②:翻了下它的github,配置沒有問題呀,這裡的測試過程省略1W字。

在這個地方一籌莫展,然後就去打LOL了,悲傷的時候必須緩解下。

好了,隊友挂機,我又回來了。又把過程想了下,docker 既然可以給我報錯"unsupport",也許405也是錯的呢。然後決定詳細排查下啟動參數:

1、按照不加任何參數直接啟動,push沒問題,啟動也沒問題;

2、發現"STANDALONE"/"REGISTRY_PROXY_REMOTEURL"這2個參數無法判斷是否會影響;

3、加上token驗證(隻加了相關的參數),發現push沒問題;

4、初步判斷可能和"STANDALONE"/"REGISTRY_PROXY_REMOTEURL"這2個參數有關;

5、最後确認和REGISTRY_PROXY_REMOTEURL有關

按照參數的解釋STANDALONE應該是索引index的開關,但是貌似不會有太大關系,先忽略掉了(大家可以搜下這個參數的具體解釋,個人覺得這個參數在這裡不影響(應該關掉false));

參數REGISTRY_PROXY_REMOTEURL意思是mirror模式,具體配置的為遠端docker倉庫,突然察覺到點什麼:mirror模式下,docker倉庫在pull的時候會去驗證遠端HUB是否有相應的鏡像,然後緩存,難道push的時候也會?

docker push 代碼

<a href="https://github.com/docker/docker/blob/master/distribution/push_v2.go" target="_blank">https://github.com/docker/dock ... v2.go</a>

49-59行有個大體解釋。

這裡隻截取了一小段代碼,這裡大概的意思是push的時候,會去對比遠端HUB是否有重複的layers。

僅為個人了解:

(login過程省略)

1、docker client接收到push指令後,首先判斷指令是否完整;

2、確定指令完整後,索引到相應的鏡像檔案,将image ID提取出來;

3、将image ID發送到倉庫中驗證是否有重複,進而處理增量上傳;

4、registry拿到image ID,先在本地驗證一次,然後到遠端HUB中驗證;

5、registry将驗證的結果發送到client,也就是代碼中的"pushState";

6、docker client根據pushState來進行上傳;

本文轉自 陳延宗 51CTO部落格,原文連結:http://blog.51cto.com/407711169/1746598,如需轉載請自行聯系原作者

繼續閱讀