Чи варто використовувати докер-композицію або запустити?


129

Чи є причина використовувати runдля запуску docker-compose.ymlфайлу чи просто використовувати up?

Я розумію, що runможна запустити певний контейнер, але я маю на увазі той випадок, коли ви його використовуєте, не вказуючи контейнер, щоб він запускав усі ваші контейнери yml.

Відповіді:


141

Як згадувалося у docker-compose run(2015 р.)

Команда, передана запуском, переосмислює команду, визначену в конфігурації служби .
Наприклад, якщо конфігурація веб-сервісу розпочато з bash, docker-compose run web python app.pyпереосмислить її python app.py.

Друга відмінність полягає в тому, що docker-compose runкоманда не створює жодного з портів, зазначених у конфігурації служби .
Це запобігає зіткнення портів з уже відкритими портами. Якщо ви хочете, щоб порти служби були створені та відображені на хості, вкажіть прапор --service-ports:

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

Тому, якщо у вас немає конкретних потреб (переопределення команди або запуск лише одного контейнера на різних портах), docker-compose up(навіть для одного контейнера) достатньо.

Чи можете ви допомогти пояснити, чому або коли ви не хочете створювати порти? Ось чому або коли вони можуть конфліктувати з уже відкритими портами

Просто тому docker-compose run, що створено для запуску разових команд для ваших послуг.
Це означає, що якщо ви вже зробили це docker-compose up, всі ваші контейнери вже запущені на вказаних портах docker-compose.yml.
Виконання docker-compose runна цьому етапі (для виконання одноразової команди), якщо воно поважало той самий порт, було б негайно негайно. Отже, створення цих портів за замовчуванням не створюється.


Інший випадок використання (у посиланні на змінні середовища )

Щоб побачити, які змінні середовища доступні для сервісу, запустіть docker-compose run SERVICE env.


Остання (2019+) версія цих команд увімкнена docker/docker.github.io:


27

Я хотів би зазначити, що якщо ви використовуєте Python з налагоджувачем pdb:

import pdb; pdb.set_trace()

Він не потрапить до оболонки, якщо ви виконаєте свій скрипт, використовуючи:

docker-compose up

Однак якщо ви використовуєте run, він знизиться до налагоджувача, як очікувалося:

docker-compose run

7

Є відповідь від docker docs .

Як правило, ви хочете docker-compose up. Використовуйте upдля запуску або перезавантаження всіх служб, визначених у a docker-compose.yml. У режимі "додавання" за замовчуванням ви бачите всі журнали з усіх контейнерів. У режимі "від'єднаний" ( -d) Compose виходить після запуску контейнерів, але контейнери продовжують працювати у фоновому режимі.

docker-compose runКоманда для запуску «одноразовий» або «AdHoc» завдання. Він вимагає назви служби, яку ви хочете запустити, і запускає лише контейнери для служб, від яких залежить запущена служба. Використовуйте run для запуску тестів або виконання адміністративних завдань, таких як видалення або додавання даних до контейнера обсягу даних. runКоманда діє як docker run -tiв тому , що вона відкриває інтерактивний термінал в контейнер і повертає статус виходу , відповідний статус завершення процесу в контейнері.


1
Це має бути прийнятою відповіддю. В основному, використовуйте docker-compose runдля виконання команд проти запущеної служби та docker-compose upнерестування нової служби.
goonerify
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.