0
我想在Docker容器上运行crond和vstfpd。如何在高山linux docker容器上运行crond和vsftpd?
首先,我创建了一个高山vstfpd搬运工容器:
FROM alpine:3.4
RUN apk update && apk add vsftpd
RUN adduser -h /home/./files -s /bin/false -D files
RUN echo "local_enable=YES" >> /etc/vsftpd/vsftpd.conf \
&& echo "chroot_local_user=YES" >> /etc/vsftpd/vsftpd.conf \
&& echo "write_enable=YES" >> /etc/vsftpd/vsftpd.conf \
&& echo "local_umask=022" >> /etc/vsftpd/vsftpd.conf \
&& echo "passwd_chroot_enable=yes" >> /etc/vsftpd/vsftpd.conf \
&& echo 'seccomp_sandbox=NO' >> /etc/vsftpd/vsftpd.conf \
&& echo 'pasv_enable=Yes' >> /etc/vsftpd/vsftpd.conf \
&& echo 'pasv_max_port=10100' >> /etc/vsftpd/vsftpd.conf \
&& echo 'pasv_min_port=10090' >> /etc/vsftpd/vsftpd.conf \
&& sed -i "s/anonymous_enable=YES/anonymous_enable=NO/" /etc/vsftpd/vsftpd.conf
VOLUME /home/files
EXPOSE 20 21 10090-10100
接下来,我创建了一个使用另一个容器上一个:
FROM alpine-vsftpd
COPY myScript /bin/myScript
COPY root /var/spool/cron/crontabs/root
RUN chmod +x /bin/myScript
CMD /usr/sbin/crond -f -l 2 -L /var/log/cron.log && /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
当容器启动时,只运行crond。如果切换命令,只运行VSFTPD:
CMD /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf && /usr/sbin/crond -f -l 2 -L /var/log/cron.log
试图使用中间脚本,发生相同的,只运行第一个:
FROM alpine-vsftpd
COPY myScript /bin/myScript
COPY root /var/spool/cron/crontabs/root
RUN chmod +x /bin/myScript
COPY entrypoint.sh/
RUN chmod +x /entrypoint.sh
CMD /entrypoint.sh
entrypoint.sh:
/usr/sbin/crond -f -l 2 -L /var/log/cron.log
/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
现在只运行crond。如果线路切换,则只运行vsftpd。
为什么只运行第一个? 如何运行?
我已经把它放在CMD上,它工作。非常感谢你。但是,为什么不能使用entrypoint.sh? – mabg
因为一旦前台任务启动,该线程上的执行将不会继续,直到该任务结束。所以你在后台线程中运行一个任务,在主线程中运行另一个任务。 此外,CMD vs入口点的命令执行方式并没有太多差异。因此,上面同时适用于CMD和入口点(尝试在CMD中运行每个单独的命令;结果应该让你明白这一点)(你必须通过Ctrl + C手动结束守护进程))。 –
在这种情况下,两者都启动,但vsftpd在尝试连接时未响应。我需要把它们放在后台才能正常工作:CMD/usr/sbin/crond -l 2 -L /var/log/cron.log |/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf – mabg