Docker: Tambahkan kebijakan mulai ulang ke wadah yang sudah dibuat

229

Saya melihat bahwa Docker telah menambahkan sesuatu yang disebut kebijakan memulai kembali untuk menangani restart wadah jika, misalnya, reboot.

Meskipun ini sangat berguna, saya melihat bahwa perintah kebijakan restart hanya berfungsi dengan baik docker rundan tidak docker start. Jadi pertanyaan saya adalah:

Apakah ada cara untuk menambahkan kebijakan memulai kembali ke wadah yang sudah dibuat sebelumnya?

Tenda Enrique Moreno
sumber
Anda harus mengubah jawaban yang diterima menjadi @Yale Huang. Jawaban yang diterima salah dengan versi buruh pelabuhan saat ini. Saya mengerti jawabannya mungkin telah membantu Anda saat itu tetapi sekarang itu menyesatkan.
Stepan Vavra
2
Selesai Terima kasih atas peringatannya.
Tenda Enrique Moreno

Jawaban:

575

Dalam versi terbaru dari buruh pelabuhan (per 1.11) Anda memiliki updateperintah:

docker update --restart=always <container>
Pau Ruŀlan Ferragut
sumber
9
Sepertinya ini ditambahkan di Docker 1.11.0.
phansen
@phansen: Memang benar .
TachyonVortex
4
Seharusnya jawaban yang diterima dengan peringatan bahwa ia bekerja pada Docker 1.11.
JohnDoe
6
dengan buruh pelabuhan 17.09 Saya harus menjalankan docker update --restart always <container> docs.docker.com/engine/admin/start-containers-automatically
HarlemSquirrel
4
docker updatemenerima beberapa ID kontainer, jadi tidak perlu xargssama sekali, cukup lakukan docker update --restart=always $(docker ps -q).
Markus
49

Ada dua pendekatan untuk memodifikasi RestartPolicy:

  • Cari tahu ID kontainer, hentikan seluruh layanan buruh pelabuhan, ubah /var/lib/docker/containers/CONTAINER_ID/hostconfig.json, atur RestartPolicy -> Nama menjadi "selalu", dan mulai layanan buruh pelabuhan.
  • docker commit wadah Anda sebagai gambar baru, berhenti & rm wadah saat ini, dan mulai wadah baru dengan gambar.
Yale Huang
sumber
2
hentikan wadah, edit, mulai wadah. bekerja seperti pesona. Saya tidak tahu mengapa pengeditan dinonaktifkan.
kabut
2
Akhirnya, jawaban yang masuk akal :)
Navin
Bekerja untuk saya di server lama dengan buruh pelabuhan 1.10 (jangan tanya 😱). Sedih docker updatememungkinkan untuk memodifikasi kebijakan mulai ulang hanya pada 1,11+
Igor Kupczyński
1

Menggunakan --restart=alwayskebijakan akan menangani restart wadah yang ada jika reboot.

Masalahnya adalah bahwa jika ada beberapa wadah dengan --restart=alwaysketika Anda menjalankan gambar dari versi yang lebih baru seperti yang dibahas dalam buruh pelabuhan - bagaimana Anda menonaktifkan restart otomatis pada wadah? .

Mencoba untuk menghapus wadah secara otomatis ketika ada dengan opsi put docker run --rmjuga akan bermasalah dengan --restart=always kebijakan karena mereka saling bertentangan .

$ docker run --rm --restart always <image>
Conflicting options: --restart and --rm

Jadi dalam hal ini lebih baik untuk memilih opsi lain: --mulai kembali kebijakan kecuali dihentikan .

$ docker run --rm --restart unless-stopped <image>

Kebijakan ini tidak akan bertentangan dengan docker run --rmtetapi seperti yang dijelaskan dalam dokumentasi buruh pelabuhan :

Mirip dengan --restart=always, kecuali bahwa ketika wadah dihentikan (secara manual atau sebaliknya) , wadah tidak dimulai ulang bahkan setelah daemon Docker dimulai ulang.

Jadi ketika menggunakan --restart unless-stoppedkebijakan ini , untuk memastikan restart berfungsi jika itu berhenti secara tidak sengaja ketika Anda menutup terminal, lakukan sekali di terminal lain seperti di bawah ini:

$ docker ps
$ docker restart <container>

Tunggu sampai proses pembunuhan berakhir di shell sebelumnya, lalu tutup dan tinggalkan ( jangan keluar ).
Dan periksa lagi di terminal yang tersisa jika wadah masih berjalan:

$ docker ps

Jika masih berjalan, Anda dapat mem-boot ulang dengan aman dan memeriksa kembali bahwa aplikasi sedang restart dan melihat buruh pelabuhan Anda bersih tanpa banyak wadah yang tidak digunakan.

Chetabahana
sumber