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

24

The docker-compose runreferensi menyatakan bahwa ia memiliki --rmpilihan untuk

Hapus wadah setelah dijalankan.

Saya ingin menjadikan ini runperilaku default untuk beberapa layanan yang saya tentukan di docker-compose.yml.

Jadi, pertanyaannya adalah :

  1. Bisakah itu ditentukan docker-compose.yml?
  2. Jika bisa, bagaimana saya bisa melakukannya?

( INB4 "Gunakan alias bash, Luke!" : Tentu saja saya dapat menegakkan ini di luar docker-compose.ymldengan menetapkan beberapa alias bash seperti alias docker-compose-run='docker-compose run --rm'tapi saya tertarik pada bagaimana saya bisa menegakkan itu dengan tepat docker-compose.yml, bukan dengan cara ekstra.)

Ivan Kolmychek
sumber

Jawaban:

10

TLDR: Masih tidak mungkin 2018-11 ; gunakan docker-compose downataudocker-compose run --rm

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

Saya memiliki pertanyaan yang sama dan ini adalah 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 Facebook.

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 mendeklarasikannya di docker-compose.ymldalamnya akan membuat Anda tidak repot; 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 ditentukan dalam konfigurasi layanan .

[...] perintah tidak membuat port yang ditentukan dalam konfigurasi layanan. Ini mencegah tabrakan port dengan port yang sudah terbuka. Jika Anda ingin port layanan untuk dibuat dan dipetakan ke tuan rumah, tentukan --service-port bendera

docker-compose rm -f

-f, - memaksa Jangan meminta untuk mengkonfirmasi penghapusan

Moe Pad
sumber
8

Itu bukan bagian dari Dockerfileatau docker-compose.ymlspec, itu hanya opsi cli untuk menjalankan perintah, jadi jawabannya tidak. Anda harus mengandalkan sesuatu yang eksternal untuk menegakkan.

Jika Anda memiliki beberapa alat bangun untuk proyek Anda, biasanya yang terbaik adalah membungkus tugas-tugas yang dibuat oleh buruh pelabuhan. Misalnya proyek gradle kami menyediakan tugas-tugas terkait buruh pelabuhan yang menetapkan beberapa opsi default seperti --rmuntuk menjalankan tugas.

Erik Dannenberg
sumber