日前,更新 Linux 下的 OneDrive 客戶端 的時候,按 說明 操作,出現這個錯誤:
permission denied open config in w mode
- 簡單版
先用 root 運行一次 container,目錄權限更新以後再用 onedrive 用戶運行就可以了。 - 詳細版
乍看之下,感覺是 container 中的目錄權限不對,因為這個錯誤之前還有一句
change owner of /onedrive/data to onedrive:onedrive with gosu
然後用 override entrypoint 的模式進去看一眼(默認 entrypoint.sh 會卡在不停重啟):
docker run --entrypoint sh -it driveone/onedrive:edge
果然發現 /onedrive/data 是 root,第一反應就是用 root 啟動 container:
docker run -it --name onedrive -v onedrive_conf:/onedrive/conf \
-v "${ONEDRIVE_DATA_DIR}:/onedrive/data" \
-e "ONEDRIVE_UID=${ONEDRIVE_UID}" \
-e "ONEDRIVE_GID=${ONEDRIVE_GID}" \
-e "ONEDRIVE_RUNAS_ROOT=1" \
driveone/onedrive:edge
果然可以運行了。
然後發現了第二個問題:新創建的本地文件和目錄都是 root 權限,用戶無法訪問。
此時再看 container 中的目錄權限已經正確,此時再用 onedrive 用戶運行 docker 即可:
docker run -it --name onedrive -v onedrive_conf:/onedrive/conf \
-v "${ONEDRIVE_DATA_DIR}:/onedrive/data" \
-e "ONEDRIVE_UID=${ONEDRIVE_UID}" \
-e "ONEDRIVE_GID=${ONEDRIVE_GID}" \
driveone/onedrive:edge