我想在docker容器上运行crond和vstfpd。
首先,我创建了一个alpine-vstfpd docker容器:
python id3.py /path/to/filename.csv
接下来,我创建了另一个使用前一个容器的容器:
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
当容器启动时,只运行crond。如果切换命令,只运行vsftpd:
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
尝试使用中间脚本,发生相同,只运行第一个:
CMD /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf && /usr/sbin/crond -f -l 2 -L /var/log/cron.log
entrypoint.sh:
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
现在只运行crond。如果换行,只运行vsftpd。
为什么只运行第一个? 如何运行?
答案 0 :(得分:1)
将一个任务作为后台任务运行,另一个作为主要前台任务:
/usr/sbin/crond -f -l 2 -L /var/log/cron.log | /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
另外(这可能相当晚,但如果以后它会帮助某人),我忘了提及Supervisor也可用于运行多个进程。