部署在 docker container 中的 ASP.NET Core 在執行時想要建立資料夾,在建立時出現以下錯誤訊息:
在看到權限問題的錯誤訊息後,筆者第一時間想到的是要改 Dockerfile,因為很可能是因為筆者使用的是 .NET 8 在 docker container 中不再使用 root ,而是一般權限的使用者,所以沒有權限存取檔案系統。
在修改了很多次 Dockerfile 後,突然想到筆者為了避免容器刪掉後檔案不見,有將容器內的資料夾使用 docker volume 功能綁定本機的資料夾,讓容器內的檔案可以直接儲存在主機中。
所以問題很可能和容器內部的檔案權限沒有關係,而是應該要調整本機映射的路徑的檔案權限。在本機直接執行以下指令,調整映射目標路徑的權限:
然後容器內部就可以正常的建立資料夾/修改檔案了
System.UnauthorizedAccessException: Access to the path '/app/attachment/2024' is denied.
---> System.IO.IOException: Permission denied
--- End of inner exception stack trace ---
at System.IO.FileSystem.CreateParentsAndDirectory(String fullPath, UnixFileMode unixCreateMode)
at System.IO.FileSystem.CreateDirectory(String fullPath, UnixFileMode unixCreateMode)
at System.IO.Directory.CreateDirectory(String path)
在看到權限問題的錯誤訊息後,筆者第一時間想到的是要改 Dockerfile,因為很可能是因為筆者使用的是 .NET 8 在 docker container 中不再使用 root ,而是一般權限的使用者,所以沒有權限存取檔案系統。
在修改了很多次 Dockerfile 後,突然想到筆者為了避免容器刪掉後檔案不見,有將容器內的資料夾使用 docker volume 功能綁定本機的資料夾,讓容器內的檔案可以直接儲存在主機中。
所以問題很可能和容器內部的檔案權限沒有關係,而是應該要調整本機映射的路徑的檔案權限。在本機直接執行以下指令,調整映射目標路徑的權限:
sudo chmod -R 777 /home/dev/attachment
然後容器內部就可以正常的建立資料夾/修改檔案了
留言
張貼留言
如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com