मेरे पास लिनक्स सिस्टम चलाने वाला एक समान मुद्दा है। सिस्टम बूट होने के बाद, "जब तक रोका नहीं" की पुनरारंभ नीति वाला एक कंटेनर स्वचालित रूप से पुनरारंभ नहीं होगा, जब तक कि मैंने एक कमांड टाइप नहीं किया है जो किसी तरह से "docker ps" का उपयोग करता है। मुझे आश्चर्य हुआ क्योंकि मुझे उम्मीद थी कि कमांड केवल कुछ स्टेटस की जानकारी देगी। इसके बाद मैंने कमांड "systemctl स्टेटस डॉकटर" की कोशिश की। ऐसी व्यवस्था पर जहां कोई डॉकटर कमांड नहीं चलाए गए थे, इस कमांड ने निम्नलिखित की सूचना दी:
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; disabled; vendor preset: enabled)
Active: inactive (dead) TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
ऐसी प्रणाली पर जहाँ "docker ps" को अन्य डॉकटर कमांड के साथ नहीं चलाया गया था, मुझे निम्नलिखित मिला:
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; disabled; vendor preset: enabled)
Active: active (running) since Sun 2020-11-22 08:33:23 PST; 1h 25min ago
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 3135 (dockerd)
Tasks: 13
Memory: 116.9M
CGroup: /system.slice/docker.service
└─3135 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
... [various messages not shown ]
सबसे अधिक संभावना यह है कि डॉकटर कंटेनर को पूरी तरह से शुरू करने और शुरू करने से पहले कुछ डॉकटर कमांड का इंतजार करता है। आप संभवतः उन सभी सेवाओं के बाद एक बिंदु पर एक सिस्टमड यूनिट फ़ाइल में "docker ps" चला सकते हैं, जिन्हें आपके कंटेनरों की प्रारंभिक आवश्यकता है। मैंने निम्नलिखित के साथ निर्देशिका / lib / systemd / प्रणाली में docker-onboot.service नामक फ़ाइल डालकर इसका परीक्षण किया है:
[Unit]
# This service is provided to force Docker containers
# that should automatically restart to restart when the system
# is booted. While the Docker daemon will start automatically,
# it will not be fully initialized until some Docker command
# is actually run. This unit merely runs "docker ps": any
# Docker command will result in the Docker daemon completing
# its initialization, at which point all containers that can be
# automatically restarted after booting will be restarted.
#
Description=Docker-Container Startup on Boot
Requires=docker.socket
After=docker.socket network-online.target containerd.service
[Service]
Type=oneshot
ExecStart=/usr/bin/docker ps
[Install]
WantedBy = multi-user.target
अब तक (एक परीक्षण, इस सेवा के साथ सक्षम), कंटेनर तब शुरू हुआ जब कंप्यूटर बूट किया गया था। मैंने docker.service पर निर्भरता की कोशिश नहीं की क्योंकि docker.service तब तक शुरू नहीं होगी जब तक कि docker कमांड नहीं चलती। अगला परीक्षण डॉकटर-ऑनबूट अक्षम के साथ होगा (यह देखने के लिए कि क्या वांटेडबी निर्भरता स्वचालित रूप से इसे शुरू करेगी)।
Systemdवाला @kon का उत्तर उस उद्देश्य के लिए सबसे अच्छे समाधानों में से एक है और इसके लिए अधिक अपवोट चाहिए।