我在新的
ftp
容器中设置了 alpine
,并安装了 lftp
客户端来测试 ftp,但它似乎不起作用,并出现以下错误:[500 OOPS: child died]
我的设置和配置似乎没问题,但不确定为什么它不起作用。
这是我的设置:
Dockerfile:
FROM alpine:3.19
RUN apk upgrade && apk update
RUN apk add lftp vsftpd
RUN adduser -D tofaha
RUN echo tofaha:1337 | chpasswd
RUN \
echo "listen=YES" > /etc/vsftpd/vsftpd.conf; \
echo "local_enable=YES" >> /etc/vsftpd/vsftpd.conf; \
echo "write_enable=YES" >> /etc/vsftpd/vsftpd.conf; \
echo "anonymous_enable=NO" >> /etc/vsftpd/vsftpd.conf; \
echo "chroot_local_user=YES" >> /etc/vsftpd/vsftpd.conf; \
echo "allow_writeable_chroot=YES" >> /etc/vsftpd/vsftpd.conf;
CMD vsftpd /etc/vsftpd/vsftpd.conf
EXPOSE 21
然后我构建图像并使用以下命令运行它:
docker build . -t my-ftp
docker run -d -p 21:21 --name ftp-cont my-ftp
进入容器外壳:
docker exec -it ftp-cont sh
然后使用
ftp
客户端连接到 lftp
:
lftp localhost -u tofaha
# Password is 1337
lftp tofaha@localhost:~>
然后当我尝试列出或创建目录时,它给我这个错误:
lftp tofaha@localhost:~> ls
`ls' at 0 [500 OOPS: child died]
有什么想法吗?
嗯,事实证明我需要在
vsftpd
配置中添加这一行:
seccomp_sandbox=NO
感谢这篇帖子,上面写着:
vsftpd 3.0 版本引入了一项新功能,这似乎给一些人带来了问题。该功能是 seccomp 沙箱,可以通过在 /etc/vsftpd.conf 中添加以下行来关闭它: seccomp_sandbox=否
编辑
vsftpd.conf
文件(在我的例子中可在此路径 /etc/vsftpd/vsftpd.conf
中找到),并将上面的行添加到其中。
不要忘记重新启动
vsftpd
服务以应用新配置。
或将 dockerfile 更新为以下内容:
Dockerfile:
FROM alpine:3.19
RUN apk upgrade && apk update
RUN apk add lftp vsftpd
RUN adduser -D tofaha
RUN echo tofaha:1337 | chpasswd
RUN \
echo "listen=YES" > /etc/vsftpd/vsftpd.conf; \
echo "local_enable=YES" >> /etc/vsftpd/vsftpd.conf; \
echo "write_enable=YES" >> /etc/vsftpd/vsftpd.conf; \
echo "anonymous_enable=NO" >> /etc/vsftpd/vsftpd.conf; \
echo "chroot_local_user=YES" >> /etc/vsftpd/vsftpd.conf; \
echo "allow_writeable_chroot=YES" >> /etc/vsftpd/vsftpd.conf; \
echo "seccomp_sandbox=NO" >> /etc/vsftpd/vsftpd.conf; # NOTE this new line
CMD vsftpd /etc/vsftpd/vsftpd.conf
EXPOSE 21