[已解決] docker 容器中的 ASP.NET Core 檔案沒有權限

部署在 docker container 中的 ASP.NET Core 在執行時想要建立資料夾,在建立時出現以下錯誤訊息:
    
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
    

然後容器內部就可以正常的建立資料夾/修改檔案了

留言