2017-09-14 150 views
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。

为什么只运行第一个? 如何运行?

回答

1

运行一个任务,后台任务和其他作为主前台任务:

/usr/sbin/crond -f -l 2 -L /var/log/cron.log | /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf 

而且(这可能是相当晚,但在情况下,它可以帮助别人的未来),我忘了提,Supervisor可能也可用于运行多个进程。

+0

我已经把它放在CMD上,它工作。非常感谢你。但是,为什么不能使用entrypoint.sh? – mabg

+0

因为一旦前台任务启动,该线程上的执行将不会继续,直到该任务结束。所以你在后台线程中运行一个任务,在主线程中运行另一个任务。 此外,CMD vs入口点的命令执行方式并没有太多差异。因此,上面同时适用于CMD和入口点(尝试在CMD中运行每个单独的命令;结果应该让你明白这一点)(你必须通过Ctrl + C手动结束守护进程))。 –

+0

在这种情况下,两者都启动,但vsftpd在尝试连接时未响应。我需要把它们放在后台才能正常工作:CMD/usr/sbin/crond -l 2 -L /var/log/cron.log |/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf – mabg

相关问题