首頁

目前文章總數:223 篇

  

最後更新:2026年 03月 14日

0012. 避開 Snap 版 Docker 的路徑掛載陷阱

日期:2026年 03月 21日

標籤: Docker Docker-Compose Container Ubuntu Linux

摘要:Docker


應用所需:已安裝 Docker
解決問題:檔案確實存在,為何 docker build 時出現 invalid mount config: bind source path does not exist
範例檔案:本篇範例代碼
相關參考:0023. Jenkins 如何在限制中完成自動化 : 動態讀取 Git JSON 機器清單的 Jenkins 佈署方案,中出現的延伸問題
基本介紹:本篇分為 3 部分。
第一部分:問題描述
第二部分:解決方法
第三部分:驗證結果






第一部分:問題描述

Step 1:運行範例代碼 - 出現錯誤

0023. Jenkins 如何在限制中完成自動化 : 動態讀取 Git JSON 機器清單的 Jenkins 佈署方案,中出現的延伸問題
建置過程出現以下錯誤:

docker: Error response from daemon: invalid mount config for type "bind": bind source path does not exist: /var/dockervolumes/GetDockerContainerEnvironmentParameterExample/appsettings.json.


依照描述,會推論檔案不存在於 /var/dockervolumes/GetDockerContainerEnvironmentParameterExample/appsettings.json


Step 2:檢查檔案

到目標主機檢查,確認檔案也存在,因此不可能是 ** not exist**

ls /var/dockervolumes/GetDockerContainerEnvironmentParameterExample/appsettings.json




Step 3:問題原因

這屬於 Snap 版 Docker 的路徑掛載陷阱

Ubuntu 等系統若透過 snap install docker 安裝,Docker 會運行在沙盒環境中,受限於 AppArmor 政策,無法直接掛載 /var 或 /home 以外的非標準系統路徑。


通常實務上會避免 避開 Snap 或 Flatpak。雖然它們安裝方便 但常常會有非預期的問題



第二部分:解決方法

Step 1:解決方法

解除安裝 Snap 版本,並依照 Docker 官方文件 (Docker Engine) 的方式透過 apt-get 安裝。
1. 解除安裝 snap docker:

sudo snap remove docker


2. 安裝官方 Docker

curl -fsSL https://get.docker.com | sh


3. 啟動 Docker 進程

sudo systemctl start docker


4. 檢查是否正確啟動

docker info | grep "Docker Root Dir"


最終,若成功安裝會出現 Server: Docker Engine …



第三部分:驗證結果

Step 1:驗證結果 - 解決

再次重新部署,可以發現恢復正常,不再報錯,官方 docker 可以正常訪問 /var 路徑下的資料夾