2Fauth Docker容器启动失败(退出码1):SQLite权限问题求助
部署2Fauth Docker容器后启动报错退出码1,错误信息如下:
2fauth | Running version 5.0.3 commit 35f2f1d built on 2024-01-19T14:54:35Z
2fauth | supervisord version: v0.6.8
2fauth | PHP 8.1.22 (fpm-fcgi) (built: Aug 3 2023 23:11:21)
2fauth | nginx version: nginx/1.22.1
2fauth | touch: /2fauth/database.sqlite: Permission denied
2fauth exited with code 1
这是容器内进程无权限写入SQLite数据库文件导致的,以下是三种可行的解决方法:
方法一:调整宿主机挂载目录权限
若你通过docker-compose将宿主机目录挂载到容器/2fauth路径,直接在宿主机修改该目录权限,让容器内www-data用户(UID/GID通常为33)拥有写入权限:# 替换为你的宿主机挂载目录实际路径 chown -R 33:33 /path/to/your/2fauth/data执行后重启容器:
docker-compose up -d方法二:在docker-compose.yml中指定运行用户
不想修改宿主机权限的话,可在docker-compose.yml中添加user配置,让容器以宿主机拥有该目录权限的用户运行:services: 2fauth: # 保留原有其他配置 user: "1000:1000" # 替换为你的宿主机用户UID:GID,可通过`id`命令查看修改完成后重启容器即可。
方法三:使用Docker卷替代宿主机目录挂载
Docker卷会自动处理权限问题,将docker-compose.yml中的宿主机挂载替换为Docker卷:services: 2fauth: # 保留原有其他配置 volumes: - 2fauth-data:/2fauth # 替换原来的宿主机路径挂载配置 volumes: 2fauth-data: # 定义Docker卷重新启动容器,Docker会自动创建并管理该卷的权限。
内容的提问来源于stack exchange,提问作者Iznogood1

