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