Saya memiliki masalah serupa saat menjalankan sistem Linux. Setelah sistem di-boot, wadah dengan kebijakan restart "kecuali-dihentikan" tidak akan restart secara otomatis kecuali saya mengetik perintah yang menggunakan buruh pelabuhan dalam beberapa cara seperti "buruh pelabuhan ps". Saya terkejut karena saya mengharapkan perintah itu hanya melaporkan beberapa informasi status. Selanjutnya saya mencoba perintah "systemctl status docker". Pada sistem yang tidak menjalankan perintah buruh pelabuhan, perintah ini melaporkan hal berikut:
● 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
Pada sistem di mana "docker ps" telah dijalankan tanpa perintah Docker lain, saya mendapatkan yang berikut:
● 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 ]
Penjelasan yang paling mungkin adalah bahwa Docker menunggu beberapa perintah buruh pelabuhan sebelum sepenuhnya menginisialisasi dan memulai kontainer. Anda mungkin dapat menjalankan "docker ps" dalam file unit systemd pada satu titik setelah semua layanan yang dibutuhkan container Anda telah diinisialisasi. Saya telah menguji ini dengan meletakkan file bernama docker-onboot.service di direktori / lib / systemd / system dengan konten berikut:
[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
Sejauh ini (satu tes, dengan layanan ini diaktifkan), kontainer dimulai saat komputer di-boot. Saya tidak mencoba ketergantungan pada docker.service karena docker.service tidak akan mulai sampai perintah docker dijalankan. Tes selanjutnya adalah dengan docker-onboot dinonaktifkan (untuk melihat apakah ketergantungan WantedBy akan secara otomatis memulainya).
Systemd
sebagai manajer layanan adalah salah satu solusi terbaik untuk tujuan itu dan membutuhkan lebih banyak suara positif.