Haruskah saya menggunakan komposisi buruh pelabuhan atau menjalankan?

129

Apakah ada alasan untuk runmemulai docker-compose.ymlfile atau harus Anda gunakan sajaup ?

Saya mengerti bahwa rundapat memulai wadah tertentu, tetapi saya merujuk pada wadah di mana Anda menggunakannya tanpa menentukan wadah sehingga memulai semua wadah yml Anda.

Raif
sumber

Jawaban:

141

Sebagaimana disebutkan dalam docker-compose run(2015)

Perintah yang diteruskan oleh run menimpa perintah yang ditentukan dalam konfigurasi layanan .
Misalnya, jika konfigurasi layanan web dimulai dengan bash, kemudian docker-compose run web python app.pymenimpanya python app.py.

Perbedaan kedua adalah docker-compose runperintah tidak membuat port yang ditentukan dalam konfigurasi layanan .
Ini mencegah tabrakan port dengan port yang sudah terbuka. Jika Anda ingin port layanan dibuat dan dipetakan ke host, tentukan flag --service-ports:

$ docker-compose run --service-ports web python manage.py shell

Jadi kecuali Anda memiliki kebutuhan spesifik tersebut (mengesampingkan perintah atau menjalankan hanya satu kontainer pada port yang berbeda), docker-compose up(bahkan untuk satu kontainer) sudah cukup.

Bisakah Anda membantu menjelaskan mengapa atau kapan Anda tidak ingin port dibuat? Itu sebabnya atau ketika mereka mungkin konflik dengan port yang sudah terbuka

Hanya karena docker-compose rundibuat untuk menjalankan perintah satu kali untuk layanan Anda.
Itu berarti bahwa, jika Anda sudah melakukan docker-compose up, semua wadah Anda sudah berjalan pada port yang ditentukan dari docker-compose.yml.
Melakukan docker-compose runpada tahap ini (untuk menjalankan perintah satu kali), jika itu menghormati port yang sama, akan segera gagal. Karenanya defaultnya adalah non-pembuatan port tersebut.


Kasus penggunaan lain (dalam referensi variabel lingkungan Tulis ):

Untuk melihat variabel lingkungan apa yang tersedia untuk layanan, jalankan docker-compose run SERVICE env.


Versi terbaru dari perintah-perintah itu ada di docker/docker.github.io:

VONC
sumber
27

Saya ingin menunjukkan bahwa jika Anda menggunakan Python dengan debugger pdb:

import pdb; pdb.set_trace()

Itu tidak akan jatuh ke shell jika Anda menjalankan skrip Anda menggunakan:

docker-compose up

Namun jika Anda menggunakan jalankan, itu akan drop down ke debugger seperti yang diharapkan:

docker-compose run
quickinsight
sumber
7

Ada jawaban dari dok buruh pelabuhan .

Biasanya, kamu mau docker-compose up. Gunakan upuntuk memulai atau memulai kembali semua layanan yang ditentukan dalam a docker-compose.yml. Dalam mode "terlampir" default, Anda melihat semua log dari semua wadah. Dalam mode "terlepas" (-d ), Tulis keluar setelah memulai wadah, tetapi wadah terus berjalan di latar belakang.

The docker-compose runperintah untuk menjalankan “satu-off” atau “adhoc” tugas. Ini memerlukan nama layanan yang ingin Anda jalankan dan hanya memulai wadah untuk layanan yang bergantung pada layanan yang berjalan. Gunakan run untuk menjalankan tes atau melakukan tugas administratif seperti menghapus atau menambahkan data ke wadah volume data. The runperintah bertindak seperti docker run -tidalam hal membuka terminal interaktif untuk wadah dan mengembalikan status keluar cocok dengan status keluar dari proses dalam wadah.

Jay
sumber
1
Ini harus menjadi jawaban yang diterima. Pada dasarnya, gunakan docker-compose rununtuk menjalankan perintah terhadap layanan yang berjalan, dan docker-compose upuntuk menelurkan layanan baru.
goonerify