访问FTP服务器上的文件夹时报“请检查是否有权限访问该文件夹”错误

首先报这个错误说明已经能连上 FTP 服务器了,但在客户端打开文件夹时报 “请检查是否有权限访问该文件夹”

1.查看宿主机目录权限

查看挂载的文件目录:
使用docker运行时,我将容器的目录 /home/vsftpd/ftpuser 挂载到了宿主机的 /home/docker/vsftp/ftpuser

-v /home/docker/vsftp/ftpuser:/home/vsftpd/ftpuser

查看挂载目录的权限:

ls -ld /home/docker/vsftp/ftpuser

在这里插入图片描述
属主:ftp
属组:ftp
权限:755(所有人可读,只有属主可写)
现在宿主机可以确认的是有一个用户ftp,他可以访问挂载的目录,现在需要查一下vsftp容器中是否也有一个ftp的用户,可以匹配宿主机的ftp用户

2. 判断容器中是否有匹配宿主机ftp用户的用户

进入docker容器中使用命令查看:

docker exec -it vsftpd bash
id ftpuser

显示:id: ftpuser: no such user

这就说明容器里并没有真正叫ftp的用户,所以容器访问挂载目录时会报 “没有权限访问该文件夹”。
注:fauria/vsftpd 镜像里默认只创建了一个内部 FTP 用户,用户名是你用 -e FTP_USER=xxx 设置的,但是容器里并不会真正创建一个 Linux 系统用户叫 ftp,所以挂载的宿主机目录权限可能不匹配容器内的 UID/GID。

Docker 绑定挂载目录时,是按数字 UID/GID 匹配的,容器内没有对应的 UID/GID,就无法写入。

3. 解决方案

方案一:让宿主机目录对容器用户开放(简单粗暴)
所有人都有对 /home/docker/vsftp/ftpuser 目录的读写执行权限,安全性低

chmod -R 777 /home/docker/vsftp/ftpuser

方案二:指定容器内 UID/GID 并对齐宿主机目录
fauria/vsftpd 支持设置环境变量:

-e FTP_UID=1000 \
-e FTP_GID=1000

执行步骤:

  1. 停掉旧容器:
docker stop vsftpd
docker rm -f vsftpd
  1. 创建宿主机目录并对齐 UID/GID:
chown -R 1000:1000 /home/docker/vsftp/ftpuser
  1. 启动容器:
docker run -d \
  --name vsftpd \
  -v /home/docker/vsftp/ftpuser:/home/vsftpd/ftpuser \
  -e FTP_USER=<用户名>\
  -e FTP_PASS=<密码> \
  -e FTP_UID=1000 \
  -e FTP_GID=1000 \
  -e PASV_ENABLE=YES \
  -e PASV_ADDRESS=<宿主机IP> \
  -e PASV_MIN_PORT=21100 \
  -e PASV_MAX_PORT=21110 \
  -p 21:21 \
  -p 21100-21110:21100-21110 \
  --restart=always \
  fauria/vsftpd

这样宿主机目录和容器内用户的 UID/GID 就对齐了,客户端就能正常访问目录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值