mod_wsgi, flask 與 python3

我是在 OpenShift 上遇到的情況,用 python3 + flask 寫的 web app 沒辦法啟動,用 rhc tail 出現這樣的錯誤訊息:

‘module’ object has no attribute ‘__loader__’

用 Google 找,在 StackOverflow 上找到這篇 flask – cannot setup apache 2.2 with mod_wsgi and python 3.3? ,然後跟著提供的線索看到這篇:Problem debugging Flask under Python 3.3 ,謝謝 Eric 提供的 workaround 。

workaround 是這樣的,在初使化 Flask(name) 時,加上 instance_path 參數,所以我就改為 Flask(name, os.path.join(os.environ[‘OPENSHIFT_PYTHON_DIR’], ‘instance’)) ,就解決了。

問題是出在 flask.Flask 的初始函數裡,Flask.init 在 instance_path 參數為 None 時,會呼叫 auto_find_instance_path() 來取得 instance_path 的值,而 auto_find_instance_path() 又呼叫 flask.helpers 的 find_packages(),find_packages() 使用了 pkgutil.get_loader() 來尋找 module 而導致了錯誤發生。

我在想,或許添加適當的 init.py 也可以解決,但就懶得做實驗了,先這樣。

電影流水帳(2014/10/9~2014/10/20)

A City of Sadness.jpg
A City of Sadness“。 來自 Wikipedia

  • Red Dawn (IMDB, Wikipedia),中譯:紅潮入侵。故事摹擬北韓利用了某種電磁脈衝武器打到美國去了,小鎮裡的一個青少年團體在一個正好回美國休假的軍人領導下起來反抗,最後以奪得北韓軍隊用來內部通訊的機器,小隊繼續對抗北韓軍隊作結束。電影的最後,主角兄弟非常高興的要慶祝,雷神索爾哥哥也要跟女生告白了,然後流彈飛過來,就領便當了,嗯,人生無常。這個女生相當的亮眼,就是演特種部隊 2 女主角的 Adrianne Palicki ,原來她在演特種部隊 2 之前有演過這部電影。
    就安全上的考量,必須要考慮北韓打到美國的可能性,雖然可能性非常低。可能性低的最大原因是補給線太長,太容易被切斷,只要美國實行焦土政策,然後以海軍封鎖太平洋,那麼登陸的北韓軍將陷入沒有食物跟彈藥的困境而無法作戰。
  • 悲情城市 (IMDB, Wikipedia)。久仰這部電影的大名,終於把他看完了。說真的,看完還蠻心酸的,誠如裏面的大哥所言,台灣真的是「眾人吃、眾人騎,沒人愛」。看這部電影前,最好先翻閱一下「被出賣的台灣」,了解一下在那個時代背景下的台灣。台灣被清朝切割,在日本統治下被佔領了約五十年之久,然後在抗戰勝利後,給美國托管,而美國讓中華民國政府代管,來代管的人是陳儀,陳儀的作為讓台灣人不服。台灣人的不服氣在被積壓了 4 年以後,爆發了 228 事件。電影裡就是在講這段期間,林家跟吳家的故事。林家在地方上算是流氓,四個兄弟,大哥文雄當家,二哥文森跟三哥文良被日本人徵召從軍,文良僥倖回來,可是卻瘋了好一陣子,文森不知所蹤,老四文清是個聾啞殘疾,在九份拍照維生。吳家的寬榮跟文清是好朋友,妹妹寬美則在九份醫院做事,寬榮托文清照顧。
    文良休養了好一陣子,精神恢復正常,與阿嘉跟大陸人做走私生意,做到後來,兩方出現裂痕,文良被抓去關,文雄運氣好,逃了出去。文雄跟文清找了很多管道,終於把文良救出來,這次,文良是真的被關到精神失常了。之後,228 事件,寬榮跟文清被抓去關,運氣很好,沒被槍殺,都出獄。寬榮躲到深山裡去,文清繼續照相,並不時資助寬榮。再來,阿嘉又跟大陸人起了衝突,文雄氣到拿刀去找大陸人理論,被槍殺。文清接受寬榮的建議,跟寬美結婚,生了小孩,平淡美好的生活沒多久,又有風聲傳出要來抓文清。文清帶著寬美跟小孩想走,可是走到火車站,不知道往哪兒去,於是又回去,拍下全家福照片。拍完照片後三天,文清被抓走,不知去向。
    在看這片的製片、演員清單,才發現好多熟悉的名字,像張大春、吳念真、蔡秋鳳、蔡振南、詹宏志…等等,都為這部電影出過力。女主角寬美,是辛樹芬,演完這部電影以後,就息影跟著丈夫到美國去了。梁朝偉說,她是他最欣賞的女演員。這讓我想找她之前演過的電影「戀戀風塵」來看看了。關於這部電影,網路上還能 Google 到更多的資料,比我寫的詳盡多了,不妨旁徵博引,找來看看。

電影流水帳(2014/9/25~2014/10/8)

“Norwegian Wood” at Japan Society, NYC

這段期間,其實還重看了 The Dark knight rises ,把一些遺漏的片斷確實地都看過一次。片尾確實蝙蝠俠沒死去,自動駕駛裝置已經修復,所以 Bruce 是有把 Alfred 的話聽進去,並且利用這機會隱退了。

右邊的照片是菊池凜子,之前看「泛太平洋」時,她讓我印象深刻。

  • 47 Ronin (IMDB, Wikipedia),中譯:浪人47。電影一開始就說了,這是拍給完全不懂日本文化的外國人看的,還強調說看完這部電影,就可以了解日本文化了。這也未免太小看日本人了。
    主角 Kai 是孤兒,曾經被天狗養育過,所以知道巫術跟武術。逃出天狗森林以後,遇到領主 Asano,領主 Asano 收養 Kai,但 Kai 在領主 Asano 的領地裡受到歧視。Kai 不因此而怨懟,反而以德報怨。後來,領主 Asano 被另外一個領主 Kira 陷害了,天皇命令 Asano 自殺,至於領地,在一年後歸於 Kira,領下的武士們則貶為浪人。一年後,領頭的武士 Oishi 被放出來,他跑去找 Kai 跟其他的浪人,然後就東市買駿馬、西市買鞍的過程,準備的途中有被 Kira 的巫師設計,差點就無力反擊。後來是遇到要去慶祝 Kira 就職的表演藝人,透過他們才混入城堡,展開復仇。最後當然是復仇成功,但是參與復仇過程的浪人們因為違反天皇不得尋仇的命令,天皇還是下令他們自殺了。
    電影裡的亮點是菊池凜子飾演的巫師,她的演出實在很搶眼。電影裡沒交代為什麼她願意為領主 Kira 賣命,這點頗令人玩味。
  • The Monuments Men (IMDB, Wikipedia),中譯:大尋寶家。就蠻平實的故事,劇情不是那種高潮迭起的片子,看起來還不錯,不會讓人睡著。
    美國在二次大戰期間組了一個專門保護藝術品的小組,在歐洲尋找被德軍、俄軍劫掠走的藝術品,故事就是描述尋找藝術品的過程。從片尾的泛黃照片看的出來,這是根據史實去改編的,多虧了這些人,才得以保留了許多偉大的藝術品,像是蒙娜麗莎的微笑等等的。看完以後有去找一些影評,有的說劇情太過樸實,沒什麼曲折之類的,我倒是覺得導演是故意以平實的角度去描述這件事情。

更換 Ubuntu 開機過程的佈景主題

Ubuntu 開機過程其實是可以更換圖片的,甚至已經提供了不少佈景主題可以使用:apt-cache search plymouth-theme

plymouth-theme-ubuntu-logo - graphical boot animation and logger - ubuntu-logo theme
plymouth-theme-ubuntu-text - graphical boot animation and logger - ubuntu-logo theme
mythbuntu-default-settings - default settings for Mythbuntu
plymouth-theme-edubuntu - Plymouth is an application that runs very early
plymouth-theme-fade-in - graphical boot animation and logger - fade-in theme
plymouth-theme-glow - graphical boot animation and logger - glow theme
plymouth-theme-kubuntu-logo - graphical boot animation and logger - kubuntu-logo theme
plymouth-theme-kubuntu-text - graphical boot animation and logger - kubuntu-text theme
plymouth-theme-lubuntu-logo - plymouth theme for Lubuntu
plymouth-theme-lubuntu-text - plymouth text theme for Lubuntu
plymouth-theme-sabily - plymouth theme for Sabily (graphical theme)
plymouth-theme-sabily-text - plymouth theme for Sabily (text theme)
plymouth-theme-script - graphical boot animation and logger - script theme
plymouth-theme-solar - graphical boot animation and logger - solar theme
plymouth-theme-spinfinity - graphical boot animation and logger - spinfinity theme
plymouth-theme-text - graphical boot animation and logger - text theme
plymouth-theme-ubuntu-gnome-logo - graphical boot animation and logger - ubuntu-gnome-logo theme
plymouth-theme-ubuntu-gnome-text - graphical boot animation and logger - ubuntu-gnome-text theme
plymouth-theme-ubuntustudio - Ubuntu Studio Plymouth theme
plymouth-theme-xubuntu-logo - graphical boot animation and logger - xubuntu-logo theme
plymouth-theme-xubuntu-text - graphical boot animation and logger - xubuntu-text theme

你可以使用 apt-get install 來安裝,這些佈景主題會被安裝到 /lib/plymouth/themes/ 目錄下,安裝以後,該如何使用呢? 可以用 update-alternative 來替換,在 terminal 輸入 sudo update-alternative default.plymouth 以後,就可以選擇你喜愛的佈景主題了。

網路上也有人自行去修改 theme,調整字的位置、圖形等等的,用 ubuntu plymouth 去找,就可以找到相關的資訊了。

電影流水帳(2014/9/16~2014/9/24)

Gwyneth Paltrow Gwyneth Paltrow ,近年最讓人有印象的應該就 Iron Man 裡的 Pepper 了吧。在 1998 年她以 Shakespeare in Love 取得奧斯卡金像獎最佳女主角,嗯,我沒看過這部電影,有機會再來看看。這次放她的照片,是因為 Se7en,她在這部電影裡出現的次數並不多,算是配角,但是把警眷的無奈演的很好。孤身跟著丈夫離開熟悉的環境來到這個大城市,肚子裡有了小孩,身邊沒有朋友,丈夫又忙於工作,心裡有些煩惱不知道該向誰說。後來被 John Doe 找上,領了便當。後來,跟 Brad Pitt 談了兩年戀愛。

  • Se7en (IMDB, Wikipedia),台譯:火線追緝令。很棒的電影,之前不知道為何,每次都是看到 Mills 殺了 John Doe 那段,大概知道 Mills 為什麼要殺 John Doe,並沒有整部電影看完過。
    只剩下一星期就要退休的警探 Somerset 與剛上任的警探 Mills 遇到了一樁詭異的謀殺案,  Somerset 認為這不會只有一樁,就跟長官說不想接,並且也請長官不要讓 Mills 接這案子。Mills 不諒解 Somerset 的舉動,認為是 Somerset 的偏見。果然,案子接二連三發生,而且都有關聯,Somerset 依據線索判斷兇手有宗教偏執狂熱,所以才以聖經裡提到的七宗罪來作為犯案的手法。兇手 John Doe 本來隱藏的很好,警探們怎麼查都查不到,後來 Somerset 透過特殊的關係才查到,CIA 有長期監控圖書館的借閱紀錄,依此來掌握常借書的人的偏好,就是透過這個,循線找到了 John Doe 的住處,並展開追捕。很可惜這次沒有逮到 John Doe,Mills 在追捕過程裡受了傷。在 John Doe 的住處裡找到了更多的線索,這都確定了 John Doe 就是兇手。
    John Doe 逃走之後,又犯下兩起案子,接著就自首了。這讓 Somerset 跟 Mills 很錯愕,因為案子算一算,才犯下五件,照 John Doe 的劇本,應該還有兩件才是,這讓兩人有點擔心。John Doe 自首後,跟他們說,我是有條件的自首,讓 Somerset/Mills 帶我去一個地方,我才願意坦白自首,否則,我可以假裝精神錯亂,讓你們沒辦法定我罪。警方在多番考量後,決定答應他。John Doe 帶著兩個警探到了荒郊野外,然後快遞來了,Somerset 去查看快遞送了什麼,當他看完包裹以後,急忙跑向 Mills,要他放下槍。John Doe 在 Somerset 跑過來的同時,告訴 Mills 說,我今早去了你家,你太太很漂亮,我很嫉妒,強姦未遂的情況下,我殺了他,所以我犯了嫉妒的罪。Mills 很生氣,等到 Somerset 過來時,問 Somerset 看到什麼,Somerset 只是讓 Mills 放下槍。Somerset 的表情動作與口氣,其實早已證實了 John Doe 說的是真的。最後在 John Doe 的挑釁之下,Mills 殺了 John Doe,這是忿怒,John Doe 死了但也完成了他的計劃。
    在查案的過程裡,Somerset 與 Mills 的誤會早已冰釋,在電影後半段,兩人一起去酒吧喝酒,Mills 問 Somerset 為什麼要退休,Somerset 說,因為他對人性感到失望。然後 Mills 說了,「I don’t think you’re quitting because you believe these things you say.  You want to believe them, because you’re quitting.」這句話讓我開始在想事情的因果有時候往往不是自己所以為的那樣,或許正好相反也不一定。
  • The Expendables 3 (IMDB, Wikipedia),台譯:火線任務三。這次有找了新生代演員與更多前動作明星一起來演,一方面是給觀眾新鮮感,帶來活力,一方面也是幫忙引領這些新演員。不過,我得說,電影裡想說的新舊衝突表現的並不好,劇情小牽強,覺得沒有前作來的好。
    故事相當簡單,出任務,看到之前應該死卻沒死的壞蛋,然後回去找人,因為 Barney 哥不想老伙伴涉入,就找了新人一起。本來任務還算順利,結果是壞蛋故意被抓,中了計的結果是新人都被抓,Barney 僥倖逃走。Barney 哥回去以後就抄傢伙,準備自己去救人,老伙伴出現要求加入,Barney 被感動,就大家一起去。最後把新人救出來,打趴了快三個連的人,也消滅了壞蛋,然後就其樂融融這樣。
    題外話,看了 Antonio Banderas 的出場以後才發現他有小駝背~

git 不能加空目錄的變通方法

git 沒辦法加空目錄,沒有任何選項可以用。Stackoverflow (How do I add an empty directory to a Git repository? – Stack Overflow) 上提到的變通方法就是為這些空目錄添加一個空白的檔案,檔名看是要用 .gitignore 或是 README 之類的就可以。

那要找所有空目錄的話,該怎麼找?find 就可以做到這點 (參考 bash – finding empty directories unix – Stack Overflow) :

find . -type d -empty -print

那麼,要為每個空目錄加上空白檔案的話,再利用 -exec 參數就可以了:

find . -type d -empty -exec touch {}/README \;

電影流水帳(2014/9/1~2014/9/15)

Premiere Inception - Ellen Page Ellen Page,最早看到她是在鴻孕當頭這部電影裡,後來又在 Inception 裡看到她,演技真的沒話說,很厲害。

  • X-Men: Days of Future Past (IMDB, Wikipedia),中譯:X戰警-未來昔日。跟金剛狼二的片尾彩蛋接不太起來,時間點不太對。
    在未來世界,變種人被 Sentinels 計劃裡的機器人追殺,接近全滅,Professor X 跟 Magneto 找了 Wolverine 來,讓 Kitty Pryde 送他回到過去,去說服年輕時的 Professor X 跟 Magneto 合作,讓他們阻止 Mystique 不要去殺 Trask,因為這個事件會導致 Mystique 的細胞被拿去應用在 Sentinels 計劃的機器人上,而引發未來的變種人滅亡。然後,Wolverine 就說服了 Professor X 跟 Beast,找了 Quicksilver 救了 Magneto ,一起去阻止 Mystique 這樣。最後是在千鈞一髮之際,改變了未來,大概就這樣。
    坦白說,第二集的劇情比較沒那麼吸引我。然後,沒看到片尾彩蛋。
  • 八日目の蟬 (IMDB, Wikipedia),中譯:第八日的蟬。感人的故事,看到最後野野宮希和子跟薰告別並束手就擒的那段時,我眼淚流下來。故事本身有爭議性,孩子是無辜的,從整個故事看起來,也難以判定誰對誰錯,只能說每個人的作為都會巧妙的影響日後的事件。
    故事從惠津子的控訴與希和子的自我認罪開始,惠津子的丈夫-秋山丈博有了外遇,對象是希和子。希和子一直被丈博欺騙,以為他會離婚跟她在一起,甚至在懷孕以後,為了他而打掉孩子。打掉孩子的結果是造成子宮沾粘,以後沒有機會懷孕了,懷孕的惠津子知道有希和子這第三者,也知道她無法懷孕,三番兩次去羞辱她。之後,希和子很難過,打算就此離去,離去之前,他想見丈博最後一面。去丈博家的那天下著大雨,希和子看著惠津子開車送丈博去車站,她走進房子裡,看到了四個月大的嬰兒,原本哭泣的嬰兒看到希和子不但沒被嚇到,反而笑了,她被嬰兒的笑容融化了,下定決心帶著嬰兒走掉。就這樣,希和子跟孩子一起生活了快樂的四年,直到某次被拍到照片,被選為攝影比賽的佳作,才被警方循線找到。法庭最後,法官詢問希和子有沒有什麼話想說的,希和子明白的說,自己不會後悔,同時也謝謝秋山一家人。
    惠理菜(薰)在莫名其妙的狀況下,跟以為是自己親生媽媽的媽媽分開,然後到以為是陌生人的親生父母家裡住,整個家庭都錯亂了。錯亂了十幾年,惠理菜慢慢遺忘四歲前的事情,直到大學,惠理菜搬出來自己住。很巧妙的,惠理菜重蹈希和子的覆轍,愛上補習班老師,並且有了身孕。確定有了身孕,在跟補習班老師吃飯的時候,試探性的問了他關於孩子的問題,她聽完補習班老師的話以後,非常確定他跟自己的父親是同類人,於是決定跟他分手,自己把孩子生下來。接著跟認識了沒多久的安藤一起旅行,追尋著以前跟希和子的足跡,慢慢想起了以前的事情,並且也鼓起勇氣要撫養小孩。最後在電影裡,算是一個和解的結局,惠理菜說,從來就沒想過要恨任何人。

在 Ubuntu 上使用最新的 mono/monodevelop

Ubuntu 上的 mono/monodevelop 都不是很新,一般來說,用 openSuSE 或 archlinux 是比較恰當的,因為 mono 早期是依托在 Novell ,而 openSuSE 又是由 Novell 維護的關係。而 archlinux 則是有強大的 repository 可以選用。

當然,要自己編譯也不是不行,真的試了之後,你會發現 mono 倒是還好,但要編譯 monodevelop 的話就是挺痛苦的事情了,因為相依性太多、太麻煩。

早期 mono 是不太管其他 distro 上的,但後來 openSuSE 推了 build service 之後,mono 就利用這個服務來提供套件給幾個知名 distro (CentOS, Debian, Fedora, openSuSE) 使用。在 Ubuntu 安裝的說明可以參考這個網頁,套件名稱是 mono-opt 跟 mono-xsp-opt ,版本是目前最新的版本。安裝以後的目錄是在 /opt/mono ,主要是要跟原來預設的 mono 區隔開來。在 terminal 下使用,可以用 source /opt/mono/env.sh 來變更必要的環境變數,以確定使用到對的 mono runtime。

monodevelop 的話,可以利用 Eberhard Beilharz 的 ppa,套件名稱是 monodevelop-5、monodevelop-database-5、monodevelop-debugger-gdb-5,這個 ppa 也同時提供了 mono 3.4 ,但沒有 xsp 套件。在 monodevelop 裡有設定可以指定要使用哪個版本的 runtime,這可以在 [編輯(Edit)][Preferences] 裡的 專案(Project) > .NET 運行時期(.NET runtime) 裡找到。

基本上 openSuSE 的 build service 應該是不太會無緣無故消失,mono 會持續維護這裡,但 Eberhard Beilharz 的 ppa 就不一定了,這點在安裝、使用的時候,請多留意。

編譯 gcin (Ubuntu 14.04)

在 Ubuntu 14.04 編譯 gcin,需要安裝這些套件:

  • libgtk-3-dev
  • libgtk2.0-dev
  • libanthy-dev
  • libqt4-dev
  • libqt4-dev-bin
  • qtbase5-private-dev
  • libxtst-dev
  • libappindicator3-dev
  • libchewing3-dev (Optional)
  • qt5-default (Optional)
  • qtchooser (Optional)

gcin 的原始碼可以在這裡取得,在 2.8.2 裡,新酷音的支援被關掉,可以自己修改 configure 來打開設定。qt5-default 跟 qtchooser 是可以不用安裝的,這是 QT5 使用的標頭檔與工具。

docker 小記

最近試著寫 Dockerfile,遇到了一些問題,也順利解決了,所以紀錄在這裡:

  1. 使用 apt-get install 時,會因為某些套件的安裝設定而跳出對話方塊,這會導致安裝被阻塞住。這可以藉著 debconf 來避免:
    ENV DEBIAN_FRONTEND noninteractive
    ENV TERM linux
    RUN echo ‘debconf debconf/frontend select Noninteractive’ | debconf-set-selections
    其中那兩行設置環境變數似乎不起作用的樣子,主要還是第三行。
  2. 找不到 add-apt-repository 指令。這是因為基礎的 image 裡沒有的關係,得使用 apt-get install python-software-properties 來安裝,在 Trusty ,也就是 14.04 裡,得再多安裝 software-properties-common
  3. 用 14.04 時,無法安裝 ia32-libs 。到 13.10 以後,ia32-libs 被移除了,改以 multiarch-support 替代,同時,得用 dpkg 聲明要使用 i386 architecture 才能使用 :i386,例如:
    RUN dpkg –add-architecture i386
    RUN apt-get install multiarch-support gcc-multilib g++-multilib libncurses5-dev:i386
  4. webupd8 的 Java installer 實際上是個安裝的腳本,會詢問是否同意 Oracle 的 license,才開始下載並安裝。同樣,詢問時也會阻塞住,得用下列指令事先回答同意:
    RUN echo oracle-java6-installer shared/accepted-oracle-license-v1-1 select true | /usr/bin/debconf-set-selections
    RUN apt-get install -y oracle-java6-installer
  5. apt-get install 時,都加上 -y 選項以避免詢問。
  6. 不要更動 sources.list,原因是我有試著更換為台灣的替換來源,但卻會出現無法下載某些套件的情況。
  7. 如果是要搭 Android 開發環境,下面是我在 14.04 裡試出來該要裝的套件:
    RUN apt-get install -y build-essential openjdk-7-jdk multiarch-support
    RUN apt-get install -y vim ctags cscope id-utils curl gnupg flex bison gperf zip curl libc6-dev libswitch-perl libncurses5-dev:i386 x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 libgl1-mesa-dev gcc-multilib g++-multilib mingw32 tofrodos dialog python-markdown libxml2-utils xsltproc zlib1g-dev:i386 zlib1g-dev
  8. 清理 container 與 image 的步驟是先刪除 container,再刪除 image。用 docker ps -a -q 可以看 container id,然後用 docker rm 刪除 container,最後再用 docker rmi 去刪除 image,要砍光光,可以這樣用:
    docker ps -a -q | xargs docker rm
    docker images -q | xargs docker rmi
  9. Dockerfile 最後最好是來個 apt-get clean,可以減少 image 空間。
  10. 由於 docker 特性,image 是一層一層疊上去的,只要有指令更動,就會多一層,這有點像 git/svn repository 的概念。在用 docker build 做好 image 以後,你會想只要一個 image 就好,這時候你需要的關鍵字是 flatten 。使用的指令是 export 跟 improt:
    docker export red_panda | docker import – exampleimagelocal:new

關於 Docker push/pull

  1. 首先需要有 server,在安裝上非常簡單,你可以參考這篇 How to use your own Registry,但我發現不用那麼麻煩,有 python virtualenv 在手,可以很快裝好。
    virtualenv docker-registry-env
    cd docker-registry-env
    source bin/activate
    pip install docker-registry
    cp ./lib/python2.7/site-packages/config/config_sample.yml ./lib/python2.7/site-packages/config/config.yml
    打完上面指令就裝完了。啟動的話,接著打 docker-registry 就可以。上傳以後的 image/repository 會放在 /tmp/test ,使用的資料庫是 sqlite3 ,則是放在 /tmp/docker-registry.db。如果要調整位置,可以改 ./lib/python2.7/site-packages/config/config.yml 裡的 sqlalchemy_index_database 與 dev/test/prod 區段的 storage_path 。
  2. push 的方法,就我感覺是有點隱晦。要 push ,得先為 image 加上 tag,例如:
    docker tag 06a3d360b8e2 localhost:5000/myrepo
    docker push localhost:5000/myrepo
  3. pull 的話,就這樣用:
    docker pull localhost:5000/myrepo

資料來源: