Docker Compose启动vsftpd容器异常退出(状态码2,无日志)
问题分析与解决方案
核心原因
状态码2通常表示命令参数错误或权限不足,结合配置来看,主要问题集中在:
- 普通用户无法绑定20/21端口(低于1024的端口需要root权限)
- 配置文件路径冲突、权限设置不合理
- Alpine环境缺少FTP的PAM验证配置
- 日志文件权限导致无法写入
修复步骤
1. 恢复root用户运行vsftpd
vsftpd需要root权限绑定低端口,移除Dockerfile中的USER指令:
# 删掉这一行 # USER ${APP_USER}:${APP_USER}
2. 清理配置文件复制逻辑
保留一份配置文件即可,修改Dockerfile中的COPY指令:
# 替换两次COPY为一次 COPY conf/vsftpd.conf /etc/vsftpd/vsftpd.conf # 同时修正启动命令的配置文件路径 CMD ["/usr/sbin/vsftpd", "-D", "/etc/vsftpd/vsftpd.conf"]
3. 修正证书与文件权限
私钥权限必须严格限制为700,避免安全问题,同时确保配置文件归root所有:
RUN chown root:root /etc/vsftpd/server.key && \ chmod 700 /etc/vsftpd/server.key && \ chown root:root /etc/vsftpd/server.crt && \ chmod 644 /etc/vsftpd/server.crt RUN chown -R root:root /etc/vsftpd && \ chmod -R 644 /etc/vsftpd && \ chown root:root /var/log/vsftpd.log && \ chmod 644 /var/log/vsftpd.log
4. 添加PAM验证配置
Alpine默认没有ftp的PAM配置,手动创建:
RUN echo -e "auth required pam_unix.so\naccount required pam_unix.so" > /etc/pam.d/ftp
5. 补充被动模式端口映射
在Docker Compose的ports中添加被动端口范围:
ports: - 20:20 - 21:21 - 30000-30010:30000-30010
内容的提问来源于stack exchange,提问作者Dieri
相关产品推荐
相关产品推荐

