摘要
- 介绍 FileBrowser 的基本知识和相关网站文档以及安装部署。通过日志分析错误,通过镜像和宿主机的信息定位错误,通过修改目录属性以解决权限问题,验证错误原因,列出挂载卷时的注意事项,对比指定用户和提升权限的区别。
背景说明
简介和功能
- Armbian 系统是基于 Debian/Ubuntu 而构建的专门用于 ARM 芯片的轻量级 Linux 系统。
- Docker 是开源的应用容器引擎,开发者可以打包应用以及依赖包到一个轻量级、可移植的容器中,能够将应用程序与基础架构分离,以便快速交付软件和运行应用程序软件。
- FileBrowser 是自托管、开源的网页管理界面文件浏览器。可在指定的目录上传、下载、复制、移动、编辑、删除、预览和分享文件,支持文件多选。支持用户管理以及用户权限管理。
网站和文档
- 官方网站: Home
- 开源网站: GitHub
- 镜像网站: DockerHub
- 安装文档: Installation - File Browser
安装部署 (run)
-
拉取镜像。执行
docker pull filebrowser/filebrowser
命令以从 DockerHub 镜像源拉取 FileBrowser 的镜像到本地,默认为latest
标签。
-
创建并启动容器。执行下列命令以指定参数创建并启动 FileBrowser 容器。
docker run -d -p 8081:80 \-v /mnt/sdcard/docker/filebrowser/data:/srv \-v /mnt/sdcard/docker/filebrowser/database:/database \-v /mnt/sdcard/docker/filebrowser/config:/config \--restart=always \--name=filebrowser filebrowser/filebrowser
-
查看用户日志。执行
docker logs filebrowser
命令以通过查看 FileBrowser 的日志,获取为admin
用户随机生成的密码,此密码仅在首次运行时显示。由日志内容可知,容器 FileBrowser 未能正常启动运行并显示错误信息。
分析原因
-
原因归类。日志中的错误信息
cp: can't create '/config/settings.json': Permission denied
表明为权限错误。 -
查看镜像的 Dockerfile details 信息。
- 默认情况下,Docker 容器中的进程以
root
用户身份运行。 - 在 FileBrowser 的 Dockerfile 中,已通过设置 Docker 容器的
ENV
环境变量,指定容器中的进程以宿主机中UID
为1000
和GID
为1000
的用户对应的容器用户身份运行。
- 默认情况下,Docker 容器中的进程以
-
查看镜像的 Image layers 信息。由下列指令可知,构建镜像时在容器中以
UID
为1000
和GID
为1000
的用户身份,为 FileBrowser 容器创建了/config
、/database
和/srv
三个目录。ENV UID=1000 ENV GID=1000 RUN RUN addgroup -g $GID user && adduser -D -u $UID -G user user # buildkit RUN RUN mkdir -p /config /database /srv && chown -R user:user /config /database /srv && chmod +x /healthcheck.sh # buildkit
-
查看宿主机目录的属性。执行
ls -al /mnt/sdcard/docker/filebrowser
命令以查看 Docker 为 FileBrowser 容器在宿主机创建的目录的属性。 -
查看宿主机目录的所有者的 ID。执行
id root
命令以通过查看root
用户的信息来获取root
用户的 ID 号。 -
查看容器用户的 ID 对应的宿主机用户。执行
cat /etc/passwd | grep 1000
命令以通过查看系统用户信息配置文件来获取在容器中UID
为1000
的用户对应的宿主机用户。
解决问题
-
修改宿主机目录的所有者。执行
chown -vR seek:seek /mnt/sdcard/docker/filebrowser
命令以修改 Docker 为 FileBrowser 容器在宿主机创建的目录及其子目录的所有者为seek
用户。 -
确认宿主机目录的属性。执行
ls -al /mnt/sdcard/docker/filebrowser
命令以查看 Docker 为 FileBrowser 容器在宿主机创建的目录的属性。
-
重启 FileBrowser 容器。执行
docker restart filebrowser
命令以重启 Docker 中的 FileBrowser 容器。 -
查看日志。执行
docker logs filebrowser
命令以查看 FileBrowser 的日志。由日志内容可知,容器已经正常启动,并在初始化时为 admin 用户随机生成密码后开始运行。
-
验证错误原因。
- 查看容器目录的属性。执行
docker exec filebrowser ls -al
命令以查看在 Docker 的 FileBrowser 容器中,/config
、/database
和/srv
三个目录的属性。 - 查看运行容器的用户身份。执行
docker exec filebrowser id
命令以通过查看当前登录用户的信息,获取在 Docker 中运行 FileBrowser 容器的用户身份。
- 查看容器目录的属性。执行
-
打开网页管理界面。访问
http://<host>:8081
以打开 FileBrowser 文件浏览器的网页管理界面。其中<host>
为安装部署 FileBrowser 的主机的 IP 地址或域名。用户名为admin
,密码为之前随机生成的密码。
注意事项
- 在创建并启动容器时使用
-v
参数指定挂载卷。如果宿主机中的指定目录不存在,Docker 会自动以root
用户身份创建指定的目录,而不是使用运行容器的用户身份创建指定的目录。 - 在创建并启动容器时使用
-v
参数指定挂载卷,需要注意宿主机和容器的对应目录的所有者和权限是否正确匹配。 - 在创建并启动容器时使用
-u
参数指定用户,是指定的用户身份,而不是用户权限。 - 在创建并启动容器时使用
--privileged
参数提升权限,是提升为root
权限,而不是root
身份。提权有安全风险,慎用!
参考资料
- Installation - File Browser
- Docker Dockerfile | 菜鸟教程
- Image Layer Details - filebrowser/filebrowser:latest | Docker Hub
- 如何在 Docker 中处理权限? | LabEx
- 解决Docker挂载目录权限问题:提升容器访问权限的实用技巧 - 云原生实践
- 解决Docker显示“permission denied”错误导致容器无法启动的问题 - 敲码拾光--编程开发者的百宝箱
本文作者:梦幻之心星
本文链接:https://www.cnblogs.com/Sky-seeker/p/19049396
版权声明:本文依据 CC BY-NC-SA 4.0 许可证进行授权,转载请附上原文出处链接及本声明。
关注微信公众号,即时获取文章推送;访问博客园网页,正常显示网址链接。