डॉकटर कंटेनर में क्रॉस्टैब


0

नमस्ते, मैं एक डॉक कंटेनर में क्रोन की नौकरी चलाने की कोशिश कर रहा हूं। इसलिए मैंने इसे अपने में जोड़ा हैDockerfile

मेरे Dockerfile

FROM nginx:stable

RUN apt-get update -y && apt-get upgrade -y && apt-get install -y \
    vim \
    git \
    curl \
    wget \
    certbot \
    cron

COPY cron/crontab /etc/crontab
RUN chmod 0644 /etc/cron.d/crontab
RUN /etc/init.d/cron start 

मेरी crontabफाइल

# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user command
*/1 *   *   *   * root echo "test" >>~/readme

लेकिन यह काम नहीं करता है।

/etc/init.d/cron startअगर मुझे यह काम करना है तो मुझे अपने nginx कंटेनर में मैन्युअल रूप से कमांड चलाना होगा ।

इसलिए मैंने अपने में एक एंट्रीपॉइंट जोड़ा है Dockerfile, इसलिए कंटेनर शुरू होने पर इस कमांड को निष्पादित किया जा सकता है।

# ENTRYPOINT
ADD entrypoint.sh /entrypoint.sh
RUN chmod 777 /entrypoint.sh

मेरे entrypoint.sh

#!/usr/bin/env bash

/etc/init.d/cron start

मेरे docker-compose

entrypoint: /entrypoint.sh

लेकिन मेरी यह त्रुटि है:

OCI रनटाइम निष्‍फलता विफल: निष्‍कर्ष विफल हुआ: container_linux.go: 296: कंटेनर प्रक्रिया प्रारंभ करने का कारण "process_linux.go: 86: निष्‍पादन सेटिंग प्रक्रिया \" निकास स्थिति 21 \ "हुई: अज्ञात

क्या मैं कुछ भुल गया?

PS: मैंने इस ट्यूटोरियल का अनुसरण किया है


1
वह गाइड वास्तव में गलत है। बिल्ड टाइम पर सर्विस शुरू करने का कोई मतलब नहीं है। कोई व्यक्ति इंगित करता है कि लेख टिप्पणियों में और लेखक ने केवल "क्या आपने लेख की शुरुआत पढ़ी?" जो वास्तव में ट्यूटोरियल का उपयोग नहीं करने की सिफारिश है ....
जोर्डनम

बस कुछ इस छवि का उपयोग करें: hub.docker.com/r/hamiltont/docker-cron
jordanm

* / 1 बदसूरत लग रहा है और यह 2 कीस्ट्रोक्स की बर्बादी है
ब्रूनो 9779

जवाबों:


0

आप अपनी डॉकर छवि (यानी FROMलाइन में क्या है ) के लिए आधार के रूप में उपयोग कर रहे हैं ?

कई docker आधार चित्र एक मौजूदा वितरण (जैसे अल्पाइन, डेबियन, ubuntu, centos, आदि) की एक न्यूनतम स्थापना के साथ शुरू होते हैं और फिर आप जो भी पैकेज आपको इसकी आवश्यकता होती है उसे जोड़ते हैं।

यदि आपकी आधार छवि cronडिफ़ॉल्ट रूप से शामिल नहीं होती है, तो वितरण के उपयुक्त पैकेज टूल (उदा apt-get install cron) का उपयोग करके अपने डॉकफाइल में इसे स्थापित करें , और फिर इसे किसी अन्य सिस्टम पर कॉन्फ़िगर करें - जैसे कि सिस्टम crontab फ़ाइल में प्रविष्टि जोड़कर - जैसे /etc/crontab, या में एक निष्पादन योग्य स्क्रिप्ट छोड़ने के द्वारा /etc/cron.d

कुछ मामलों में, cronस्थापित किया जा सकता है लेकिन अक्षम है। आपको अपने कंटेनर की स्टार्टअप स्क्रिप्ट को संशोधित करने की आवश्यकता है ताकि यह शुरू हो crond। यह Dockerfile में RUN कमांड का उपयोग करने के समान नहीं है (जो कंटेनर निर्माण प्रक्रिया के दौरान कमांड चलाने के लिए है, प्रत्येक कंटेनर के स्टार्टअप पर नहीं)। आपके द्वारा उपयोग की जाने वाली आधार छवि के अनुसार ऐसा करने का विवरण।


1
नोट: यह प्रत्येक कंटेनर के अंदर के बजाय डॉक होस्ट पर क्रोन जॉब चलाने के लिए एक काफी सामान्य सिफारिश है। मैं ऐसा नहीं करना पसंद करता हूं, मैं कंटेनरों को पूरी तरह से आत्म-निहित होना पसंद करता हूं और मेजबान पर किसी विशेष कॉन्फ़िगरेशन की आवश्यकता नहीं है। IMO को विशेष प्रति-कंटेनर कॉन्फ़िगरेशन की आवश्यकता होती है, जो ऑटोमेशन और एपेमरल री-यूजेबिलिटी बेनिफिट्स के एक बड़े हिस्से को पराजित करता है जो कंटेनरीकरण कार्यों द्वारा प्रदान किया जाता है।
कैस

मैं पहले ही कर चुका हूं apt-get install cron। मैं उपयोग कर रहा हूं FROM nginx:stable... जब मैं अपने कंटेनर में निष्पादित service cron startकरता हूं और यह पूरी तरह से काम करता है। लेकिन जब कंटेनर बनाया जाता है तो मुझे स्वचालित रूप से शुरू करने के लिए क्रोन सेवा की आवश्यकता होती है। लेकिन यह काम नहीं करता है
केविन

किस nginx:stableपर आधारित है? यह कहां से आया? github.com/nginxinc/docker-nginx ? (वहाँ अल्पाइन और डेबियन खिंचाव आधारित संस्करण हैं)। कहीं और?
कैस

यह डॉकटर हब, github.com/nginxinc/docker-nginx/blob/… पर nginx का आधिकारिक स्थिर संस्करण है ।
केविन

ठीक है, डॉकरफाइल के अनुसार, यह डेबियन खिंचाव पर आधारित है। यह पहले से ही है CMD ["nginx", "-g", "daemon off;"]और मुझे याद नहीं है कि आप कई कमांड चला सकते हैं CMDया नहीं। शायद कुछ ऐसा प्रयास करें CMD ["cron;", "nginx", "-g", "daemon off;"]। अगर वह काम नहीं करता है, cronतो एक स्क्रिप्ट बनाएं जो चलती है और फिर nginx -g daemon off, इसे अपने कंटेनर में कॉपी करें RUN chmod +x path/to/your/script, और जोड़ें CMD /path/to/your/script
कैस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.