日前,更新 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