Відповіді:
Як згадувалося у 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
:
Я хотів би зазначити, що якщо ви використовуєте Python з налагоджувачем pdb:
import pdb; pdb.set_trace()
Він не потрапить до оболонки, якщо ви виконаєте свій скрипт, використовуючи:
docker-compose up
Однак якщо ви використовуєте run, він знизиться до налагоджувача, як очікувалося:
docker-compose run
Є відповідь від docker docs .
Як правило, ви хочете
docker-compose up
. Використовуйтеup
для запуску або перезавантаження всіх служб, визначених у adocker-compose.yml
. У режимі "додавання" за замовчуванням ви бачите всі журнали з усіх контейнерів. У режимі "від'єднаний" (-d
) Compose виходить після запуску контейнерів, але контейнери продовжують працювати у фоновому режимі.
docker-compose run
Команда для запуску «одноразовий» або «AdHoc» завдання. Він вимагає назви служби, яку ви хочете запустити, і запускає лише контейнери для служб, від яких залежить запущена служба. Використовуйтеrun
для запуску тестів або виконання адміністративних завдань, таких як видалення або додавання даних до контейнера обсягу даних.run
Команда діє якdocker run -ti
в тому , що вона відкриває інтерактивний термінал в контейнер і повертає статус виходу , відповідний статус завершення процесу в контейнері.
docker-compose run
для виконання команд проти запущеної служби таdocker-compose up
нерестування нової служби.