Podman/Docker 搭建 FTP 服务器
FTP服务想必大家都很熟悉,但是用容器的方式搭建FTP服务器还是有不少坑的,写下来防止以后自己重蹈覆辙。
拉取并运行容器
podman run -d -v /path/to/your/data:/home/vsftpd/your_ftp_user:ro \
-p 20:20 -p 21:21 -p 21100-21110:21100-21110 \
-e FTP_USER=your_ftp_user -e FTP_PASS=your_ftp_user_passwd \
-e PASV_ADDR_RESOLVE=YES \
-e PASV_ADDRESS=your.domain.name \
-e PASV_MIN_PORT=21100 -e PASV_MAX_PORT=21110 \
--name vsftpd --restart=always fauria/vsftpd
注意几个需要替换的地方
/path/to/your/data : 这里替换成你想要共享的宿主机路径
/home/vsftpd/your_ftp_user : 容器启动之后这个会在/home/vsftpd/下面以你的用户名新建一个your_ftp_user的文件夹,这里需要和后面的环境变量 -e FTP_USER=your_ftp_user 保持一致,这里是个坑!!!
-e FTP_USER=your_ftp_user : 这里your_ftp_user可以修改为合法的用户名,但是要和前面的路径保持一致
-e FTP_PASS=your_ftp_user_passwd : 这里的your_ftp_user_passwd为ftp的密码
后面的参数可以去dockerhub官方的参数说明。
进入容器修改权限
有些时候需要通过ftp共享的服务可能是通过网络挂载的目录,文件权限可能和容器中的有区别,这里也是只用了ro权限给到容器,不让容器做任何修改,假设本地网络挂载的目录的权限是0770,用户和组为uid:gid 33:33,但是容器中运行服务的ftp用户的uid为14,这时容器会报错退出,这时可以通过修改容器内的ftp用户的uid来实现对宿主文件的访问
podman exec -it vsftpd bash
usermod -u 33 ftp
#修改成功之后退出容器并重启
exit
podman restart vsftpd
重启之后就可以访问了,不行的话检查下防火墙配置