docker-compose: opsi untuk menghapus kontainer secara otomatis setelah dijalankan di docker-compose.yml

The docker-compose run referensi menyatakan bahwa ia memiliki --rm opsi untuk

Hapus wadah setelah dijalankan.

Saya ingin membuat ini default run perilaku untuk beberapa layanan yang saya tentukan di docker-compose.yml.

Jadi, pertanyaannya adalah:

  1. Bisakah entah bagaimana ditentukan dalam docker-compose.yml?
  2. Jika bisa, Bagaimana Saya bisa melakukan itu?

(INB4 " gunakan alias bash, Luke!": Tentu saja aku bisa menegakkan ini di luar docker-compose.yml dengan menetapkan beberapa bash alias seperti alias docker-compose-run='docker-compose run --rm' tapi saya tertarik pada bagaimana saya bisa menegakkannya melalui docker-compose.yml, tidak dengan cara ekstrnal.)

TLDR: ini masih tidak mungkin 2018-11; menggunakan docker-compose down atau docker-compose run --rm

Saya ingin memberikan jawaban terbaru untuk pertanyaan ini karena hampir 3 tahun kemudian. Ini akan menghemat orang lain beberapa pencarian.

Saya memiliki pertanyaan yang sama dan inilah solusi yang saya temukan (termasuk yang dari pertanyaan itu sendiri):

docker-compose down

yang melakukan hal berikut:

Menghentikan kontainer dan menghapus kontainer, jaringan, volume, dan gambar yang dibuat oleh up.

Secara default, satu-satunya hal yang dihapus adalah:

- Containers for services defined in the Compose file- Networks defined in the networks section of the Compose file- The default network, if one is used

Jaringan dan volume yang didefinisikan sebagai eksternal tidak pernah dihapus.

Meskipun Anda tidak dapat menyatakannya di docker-compose.yml ini akan aman Anda beberapa kerumitan; terutama dengan volume dan jaringan.

docker-compose run --rm

-- rm-Hapus wadah setelah dijalankan. Diabaikan dalam mode terpisah.

Menjalankan perintah satu kali terhadap layanan. Misalnya, perintah berikut memulai layanan web dan menjalankan bash sebagai perintahnya.

docker-compose run web bash

[...] perintah yang dilewati oleh run menimpa perintah yang didefinisikan dalam layanan konfigurasi.

[...] perintah tidak membuat salah satu port ditentukan dalam konfigurasi layanan. Ini mencegah tabrakan port dengan port yang sudah terbuka. Jika Anda ingin port layanan dibuat dan dipetakan ke host, tentukan -- layanan-Port bendera

docker-compose rm -f

- f, -- force Jangan minta konfirmasi penghapusan

Ini bukan bagian dari Dockerfile atau docker-compose.yml spec, ini hanya opsi cli untuk perintah run, jadi jawabannya tidak. Anda akan perlu bergantung pada sesuatu eksternal untuk menegakkan.

Jika Anda memiliki beberapa alat build untuk proyek Anda, biasanya yang terbaik adalah membungkus tugas docker-compose dengan itu. Misalnya proyek gradle kami menyediakan tugas terkait buruh pelabuhan yang mengatur beberapa opsi default seperti --rm untuk menjalankan tugas.