Tôi đã tạo hình ảnh Docker, từ Dockerfile và tôi muốn một cronjob được thực thi định kỳ khi vùng chứa dựa trên hình ảnh này đang chạy. Dockerfile của tôi là thế này (những phần có liên quan):Bên trong thùng chứa Docker, cronjobs không được thực hiện
FROM l3iggs/archlinux:latest
COPY source /srv/visitor
WORKDIR /srv/visitor
RUN pacman -Syyu --needed --noconfirm \
&& pacman -S --needed --noconfirm make gcc cronie python2 nodejs phantomjs \
&& printf "*/2 * * * * node /srv/visitor/visitor.js \n" >> cronJobs \
&& crontab cronJobs \
&& rm cronJobs \
&& npm install -g node-gyp \
&& PYTHON=/usr/sbin/python2 && export PYTHON \
&& npm install
EXPOSE 80
CMD ["/bin/sh", "-c"]
Sau khi tạo ra các hình ảnh tôi chạy một container và xác minh rằng thực sự là cronjob đã được thêm vào:
crontab -l
*/2 * * * * node /srv/visitor/visitor.js
Bây giờ, vấn đề là các cronjob không bao giờ được thực hiện. Tôi có, tất nhiên, thử nghiệm rằng "node/srv/visitor/visitor.js" thực hiện đúng khi chạy thủ công từ giao diện điều khiển.
Bất kỳ ý tưởng nào?
cron yêu cầu daemon. một nửa quá trình tạo công việc, nằm trong kho lưu trữ tệp của cron. Một nửa còn lại để cron đang thực hiện công việc. bạn có thể xem: http://stackoverflow.com/questions/20545554/how-do-i-start-cron-on-docker-ubuntu-base. Nếu bạn muốn cron daemon của máy chủ lưu trữ để làm cronwork của bạn, bạn có lẽ sẽ cần phải gắn kết thư mục cron máy chủ khi bạn bắt đầu container? Điều đó không tốt lắm! – Greg
Greg, tại sao bạn không thêm câu trả lời đó làm câu trả lời? Tôi định nói như vậy. Cũng lưu ý hình ảnh Phusion đi kèm với cron đang chạy. –
@Greg Bây giờ tôi có thể hiểu những gì bạn đang nói. Vấn đề là, tôi không muốn hoặc là gắn kết thư mục cron của máy chủ, hoặc chạy systemd bên trong thùng chứa (theo một số gợi ý khác). Tôi cảm thấy như cả hai phương pháp này sẽ không cần thiết "gây ô nhiễm" một hệ thống khác. Lựa chọn thay thế của tôi là gì? Tôi có thể chạy cronie mà không có systemd? Hoặc, là có một sự thay thế? – dsljanus