docker中安装vsftpd并完美解决登录慢的问题。

2022-03-10 12:11:02

1.前序:想在docker上vsftpd,很简单,几个命令就搞定了,可是呢,连接时间非常的慢30-40,甚至更长,于是X度一番,发现就说把/etc/resolv.conf给清空就可以了。没错确实清空就可以了。不过问题接踵而来,重启后,resolv.conf里面的nameserve又出现了。痛苦呀。尝试了挂载(有叫映射的)就是docker -v 想着先启动看,容器vsftpd能不能挂载外面的resolv.conf文件。vsftpd只能挂载ftp文件的目录。不行。因为这是独立于容器的,从hosts加载过来的。痛苦呀。然后又是一顿,度。dock如何让挂载/etc配置生效。几乎都是那一片,source /etc/profile 添加/etc/bashrc目录最后。也用了下source /etc/vsftpd/vsftpd.conf source /etc/resolv.conf没用。重启后连接还是慢。突发奇想,能不能用个shell去修改resolv.conf开始弄shell,又是一顿弄呀,大量的时间精力。各种心酸,最后,终于。**有了解决方案。
这个同样适用于,以后在/etc目录下重启会覆盖的配置文件方案。就是在宿主机(装你docker的机器,作者的centos7),启动后执行,写的脚本,把删除resolv.conf的命令写入到/etc/bashrc文件。(也可以手动加进去都行)执行shell命令更方便。这个/etc/bashrc文件只要你不删除容器(vsftpd)**你重启后还能用。里面保存着你的命令。全网第一份。服务于大众。啰嗦了这么多开始吧。

1.节省时间方案,不求甚解。类比:自动挡车

docker pull fauria/vsftpd

在这里插入图片描述
开放端口

firewall-cmd --permanent --add-port=20/tcp
firewall-cmd --permanent --add-port=21/tcp
firewall-cmd --permanent --add-port=21100/tcp
firewall-cmd --permanent --add-port=21101/tcp
firewall-cmd --permanent --add-port=21102/tcp
firewall-cmd --permanent --add-port=21103/tcp
firewall-cmd --permanent --add-port=21104/tcp
firewall-cmd --permanent --add-port=21105/tcp
firewall-cmd --permanent --add-port=21106/tcp
firewall-cmd --permanent --add-port=21107/tcp
firewall-cmd --permanent --add-port=21108/tcp
firewall-cmd --permanent --add-port=21109/tcp
firewall-cmd --permanent --add-port=21110/tcp
firewall-cmd --reload

创建放你ftp文件的文件夹。

mkdir myFtpFile

创建shell命令的文件夹,放一会要执行的命令。

mkdir /var/job

先启动容器,你也可以先写shell都行。这里启动的用户名,密码都是root。提供了两篇优秀作者的文章。
参考1参考2

docker run -d -p20:20 -p21:21 -p21100-21110:21100-21110 -v /myFtpFile:/home/vsftpd -eFTP_USER=root -eFTP_PASS=root -ePASV_ADDRESS=192.168.3.165 -ePASV_MIN_PORT=21100 -ePASV_MAX_PORT=21110 --name vsftpd --restart=always fauria/vsftpd

启动后,运行命令看一下是否up
可以先连接一下,巨卡。

dockerps -a

在这里插入图片描述

创建shell脚本在/var/job下面2.sh。名字自己可变的。

vim2.sh
#!/bin/bash
dockerexec -i vsftpdbash<<'EOF'
echo  "start"
echo ": > /etc/resolv.conf" >> /etc/bashrc
echo "true > /etc/resolv.conf" >> /etc/bashrc
echo "echo > /etc/resolv.conf" >> /etc/bashrc
echo "truncate -s 0 /etc/resolv.conf" >> /etc/bashrc
echo "source /etc/resolv.conf" >> /etc/bashrc
echo "echo "beautiful eit property.next connection ftp";" >> /etc/bashrc
source /etc/bashrc
echo  "end"
exit
EOF

精细编写。
运行脚本。

source /var/job/2.sh

好了,就这么多。
打开windows的cmd窗口,命令那两个优秀作者里面写的有。
在这里插入图片描述
非常快就连接上了。爽歪歪。

2.探求原理方案(类比:手动档万岁)

第一段的序言理解的话,这段就容易了。
进入容器内部

dockerexec -it vsftpdbash

注意,里面只能使用vi命令。

vi /etc/bashrc

在文件最后。添加

:> /etc/resolv.conftrue> /etc/resolv.confecho> /etc/resolv.conf
truncate -s0 /etc/resolv.confsource /etc/resolv.confecho"beautiful eit property.next connection ftp";

在这里插入图片描述
最后

source /etc/resolv.conf

重启下容器试试吧。
引申思考,可以把这种方案,应用到其他需要修改配置文件的容器。后面会再写一篇。
切记,别删除容器,删除了,还需要重新再来,重启不碍事的。
真是太不容易了。欢迎与我讨论共同成长,如果觉得对你有帮助,可以请我喝咖啡,一分也是爱。

  • 作者:danbing2226
  • 原文链接:https://blog.csdn.net/weixin_47372236/article/details/121613233
    更新时间:2022-03-10 12:11:02