You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Compose启动vsftpd容器异常退出(状态码2,无日志)

问题分析与解决方案

核心原因

状态码2通常表示命令参数错误或权限不足,结合配置来看,主要问题集中在:

  1. 普通用户无法绑定20/21端口(低于1024的端口需要root权限)
  2. 配置文件路径冲突、权限设置不合理
  3. Alpine环境缺少FTP的PAM验证配置
  4. 日志文件权限导致无法写入

修复步骤

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 14:24:53