當以Dockerfile掛在主機上的目錄是出現oci runtime error
或在Docker Share Drive分享主機磁碟機出現Firewall Detected. A firewall is blocking file Sharing between Windows and the containers.
出現這個現象在Docker for Windows上可以怎樣做?
這個問題在不同的Docker for Windows版本都有可能出現, 而我當前版本是1.13.0 (9861)
問題出現後第二天已經又有1.13.0-Beta38可以更新了
在我的一台Windows 10裡一直都有分享主機磁碟機來做Share Drive給Docker Container使用
有一天當我在測試Dockerfile時意外出現一個oci runtime error錯誤
這時在docker-compose.yml只要不用Volume把host和container的儲存位置對映就能繼續下去
找了一下原因, 重新檢查Share Drive 設定時, 正當想要重新設計Share Drive時
出現了一個有關防火牆阻礙分享磁碟機的錯誤訊息
錯誤訊息明顯地指出是防火牆的問題
Github上有不少關於這個錯誤訊息的討論, 而這應該是Docker for Windows獨有的
但在不同的版本上雖然錯誤訊息是一樣的但原因和解決的辦法卻不同
https://github.com/docker/for-win/issues/114
https://github.com/docker/for-win/issues/355
而我最後也能解決問題, 這裡列舉一些動作樣同樣出現問題的人可以試試
1. 關閉防火牆
如同錯誤訊息所示, 我們應該先排除是防火牆阻擋了些甚麼
如果你關閉了防火牆後就正常運作了, 請重新檢查DockerSmbMount這個Docker安裝時設定的防火牆規則有沒有存在
但Github上通常都說如果真的關閉防火牆就能解決的話, 就只能繼續關閉防火牆才能繼續等待更新文件.
2. 重新分享磁碟機
Docker Setting裡沒有清除分享的功能, 那個分享的勾勾可以使使消掉再Apply
但我的情況是反勾了都沒有反應, 如果你鍵入net share, 你仍然會見到C$在表列當中
你要以Administrator身份開啟Powershell , 鍵入Net share c$ /delete (假設你是分享了C:\ )
之後再試試在Docker裡分享一次磁碟機看看有沒有成功.
3. 重設Docker使用的分享用帳號
Docker Shared Drive版面上有"Reset Credentials"的功能
我最後是用這個方式解決問題的, 但我們要先建立一個帳號來使用
開啟Computer Management, 在User選擇New User
建立一個普通使用者帳號, 如dockershare
回到Shared Drives, 按Reset credentials
輸入你剛剛建立的帳號密碼
再到Reset頁選擇Restart Docker, 等待Docker重啟後, 我到這裡就解決問題了
這個問題從2016年中就間斷地出現在某些Docker for Windows版本上
希望這篇文章可以幫助到其他遇到問題的朋友