Dockerfile saya muncul untuk membangun dengan benar (itu memberitahu saya begitu). Ketika saya menjalankan wadah, saya mendapatkan pesan kesalahan di bawah ini. Saya telah mencoba menjalankan perintah ( CMD
) dengan dan tanpa direktori layanan.
crontab.sh
pada dasarnya menulis jadwal cron ke file teks ( cron.jobs
) dan kemudian mengimpor file teks ke crontab.
Dockerfile:
FROM node:0.10
MAINTAINER Tom
VOLUME /var/log/
RUN mkdir /pulse
ADD . /pulse
WORKDIR /pulse
RUN apt-get update && apt-get install -y cron
ADD *.sh /pulse/
RUN chmod 750 /pulse/crontab.sh && chmod 750 /pulse/
RUN chmod 644 /etc/crontab
CMD cron -f
CMD touch /var/log/cron.log && sh /pulse/crontab.sh && tail -f /var/log/cron.log
CMD cron /pulse/cron.jobs
CMD crontab -l
edited to add crontab.sh
crontab.sh (beberapa crons telah dihapus):
#!/bin/bash
cat <<- 'EOF' > cron.jobs
0 * * * * node /pulse/scripts/awsPulseTest.js > /tmp/awsPulseTest.log 2>&1
EOF
crontab cron.jobs
Kesalahan:
no crontab for root
Catatan samping:
- Pulse adalah nama layanan.
- Versi node sudah tua karena layanan, ini akan ditingkatkan.
- Layanan ini pada dasarnya untuk pekerjaan cron di node
Jawaban:
Ini masalah dengan dockerfile (bukan perintah dalam file). Hanya satu
CMD
yang dijalankan (yang terakhir) - lihat https://docs.docker.com/engine/reference/builder/#cmdsumber
CMD
dengan AndaRUN
.Seperti jawaban lain telah dijelaskan, hanya satu yang
CMD
akan dijalankan per Dockerfile dan perintah yang ingin Anda jalankan salah.Tetapi ada masalah yang lebih mendesak dengan pengaturan IMO Anda - Wadah Docker biasanya tidak dirancang untuk bekerja dengan cara ini. Yang harus Anda lakukan adalah menjalankan layanan cron dari host (atau orkestra Anda) sebagai proses satu kali (mungkin menggunakan sesuatu seperti
docker run
ataudocker-compose run
, atau, jika karena alasan tertentu Anda tidak ingin memulai wadah terpisah untuk ini, saya kira kamu bisa menggunakandocker exec
).Ini hanya pandangan saya tentang bagaimana wadah harus digunakan, jadi jelas Anda harus membawanya dengan sebutir garam.
sumber
docker run
. Lebih banyak wadah-y. :)Jika Anda menambahkan ini
/etc/crontab
, ini tidak akan muncul di crontab pribadi root, karena ini hanya berisi crontab khusus pengguna yang dieditcrontab -e
, bukan yang di seluruh sistem/etc
.Keterangan lebih lanjut:
Dugaan saya adalah bahwa
/pulse/crontab.sh
(yang tidak Anda tunjukkan, mengapa?) Menambahkan baris crontab yang relevan ke file crontab lebar sistem/etc/crontab
. Nanti mengeksekusi perintahcrontab -l
, tapi ini hanya menunjukkan kesalahan karena daftarroot
s pribadi crontab saja (yang kebetulan kosong), bukan sistem-lebar satu/etc/crontab
. Ini semua normal dan diharapkan. Untuk menunjukkan baris yang ditambahkan skrip Anda, Anda akan menggantinyaCMD crontab -l
denganCMD cat /etc/crontab
.Semua ini tidak ada hubungannya dengan perintah dockerfile seperti
ADD
,RUN
atauCMD
, itu hanya hal-hal dasar Linux.sumber
ADD . /etc/crontab
karena itu tidak berhasil.