Sử dụng Docker cho Mac 1.13.1 với Dockerfile sau:Output của `đuôi -f` ở phần cuối của một Docker CMD không hiển thị
FROM ubuntu:latest
MAINTAINER [email protected]
#Install packages and clean downloaded packages in the lowest layer
RUN apt-get update && apt-get -y install cron && rm -rf /var/lib/apt/lists/*
# Add crontab file in the cron directory
ADD crontab /etc/cron.d/hello-cron
# Give execution rights on the cron job and create the log file to tail in the next layer
RUN chmod 0644 /etc/cron.d/hello-cron && touch /var/log/cron.log
# Run the command on container startup
CMD echo "starting" && echo "continuing" && (cron) && echo "tailing..." && tail -f /var/log/cron.log
Với một tập tin contab của:
* * * * * root echo "Hello world `date`" >> /var/log/cron.log 2>&1
# Don't remove the empty line at the end of this file. It is required to run the cron job
Khi tôi xây dựng và chạy nó với:
docker build -t docker-cron-master .
docker run docker-cron-master
tôi thấy kết quả:
docker run docker-cron-master
starting
continuing
tailing...
Nếu tôi đợi một phút, đầu ra tail -f
không xuất hiện. Tuy nhiên, nếu tôi đăng nhập vào container chạy và đuôi tập tin tôi có thể xem nội dung:
$ docker exec -it 4eda6b1fc6ce bash
[email protected]:/# tail -f /var/log/cron.log
Hello world Fri May 5 09:53:01 UTC 2017
Hello world Fri May 5 09:54:01 UTC 2017
Tôi đã thử thêm tiếng vang khác ở phần cuối của CMD để xem nếu nó chỉ là lệnh cuối cùng của những người STDOUT bị nuốt nhưng điều đó không giúp được gì.
Tôi đã đăng mã trên github tại https://github.com/simbo1905/docker-cron
Cảm ơn!
Chạy chương trình chính (đuôi) bằng 'exec' nếu không nó sẽ không nhận tín hiệu Ctrl-C (thoát). Điều đó cũng có thể khắc phục được sự cố của bạn. '&& exec tail -f ..' – Alkaline