ولكن" إكسيك "مستحيل عندما يتم إيقاف الحاوية ، وأيضا هذه الحاوية لديها بعض البيانات" العمل " في الداخل، والتي تستخدم لتلك الأوامر، لذلك لا أستطيع استخدام
docker run ...
في كل مرة ، لأنه إعادة إنشاء حاوية من الصورة وتدمير البيانات الخاصة بي.
ما هو" الحق "و" أفضل " طريقة للحفاظ على هذه الحاوية مسننة? الأمر الذي يمكنني البدء فيه?
منذ ذكرتم المهام الدورية وربما كنت تستخدم شيئا مثل كرون بسبب الطريقة التي تريد استخدامها docker exec، لدي فقط الدواء لك. على الأقل انتهى بي الأمر بفعل شيء من هذا القبيل.
دوكيرفيل
FROM <some base>CMD tail -f /dev/null
تشغيل مع المعتاد docker run -d .... (اعتدت docker-compose)
أجد هذا الحل لطيفة كما نصل إلى الاعتماد على كرونتاب القديمة وثبت في بيئة لينكس الافتراضي جميلة ، في حين عامل الميناء يعالج ديبس منطق عملك أكثر غرابة ومتغيرات البيئة. يمكنك أيضا تعيين بعض الحدود إذا المهام الدورية الخاصة بك تتعثر & أمبير; لديك تسرب الذاكرة أو أيا كان.
سوف الذيل لا يزال يسبب بعض عمليات الملف من وقت لآخر.
النوم إلى الأبد ، دون أي آثار جانبية
# Ah, ha, ha, ha, stayin' alive...while :; do :; done & kill -STOP $! && wait $!
كيف يعمل
while :; # Run an endless loop,do :; # of do nothing,done & # as background task.kill -STOP $! # Stop the background task.wait $! # Wait forever, because background task process has been stopped.
هذا العمل كله من ما إذا كان أو لا يمكنك بدء حاوية توقف ، يعتمد على كيفية إنشاء الحاوية في الأصل ، أي تشغيل. إذا قمت بتشغيل أمر انتهى ، أو قمت بإنهاء أمر تفاعلي ، على سبيل المثال باش ، لا يمكنك بدء أو إعادة تشغيل أو إكسيك الحاوية توقف. كل ما يمكنك فعله هو إزالته. انها غير المرغوب فيه.
ولكن التعليق الأخير تاراناكي ، واستخدام '- إيتد ' ، ويبدو أن ما أمر عامل الميناء.
الحاوية تبقي قيد التشغيل ، ويمكنك إكسيك كل ما تريد ، ويمكنك إيقاف ، بدء أو إعادة تشغيل الحاوية. بالطبع ، هذه مجرد نتيجة أولية تستند إلى صورة جبال الألب. ملاحظة ، إذا كنت نعلق على الحاوية ، وسوف تتوقف عند الخروج ، ولكن يمكنك تشغيله مرة أخرى.
لقد استخدمت كل الحلول المقترحة هنا نفسي ، ولكن كل منهم لا تتعامل مع إشارات سيغتيرم القادمة من الخفي عامل الميناء عندما يريد إغلاق الحاوية (على سبيل المثال. docker stop $containername).
لذلك أقترح ما يلي:
FROM base:image# ...CMD sh -c 'trap "exit" TERM; while true; do sleep 1; done'
انها اساسا النصي قذيفة قصيرة أن يعترض أولا (&مثل; الفخاخ & مثل;) إشارات سيغتيرم ثم يذهب إلى النوم لثانية واحدة في حلقة لا نهائية.
أنا أساسا استخدامه جنبا إلى جنب مع عامل الميناء يؤلف و أوفيليا لتزويد حاويات السيارات الجانبية للنسخ الاحتياطي لبعض الخدمات الأخرى في حاوية أخرى (مثل قواعد بيانات ماريادب).