В чем разница между docker-compose up и docker-compose start?

124

Когда бы я ни выполнял

docker-compose start 
docker-compose ps

Я вижу свои контейнеры с состоянием "ВВЕРХ". Если я сделаю

docker-compose up -d

Я увижу более подробную информацию, но она будет в том же состоянии. Есть ли разница между обеими командами?

Майкл Вильнёв
источник

Ответы:

166

запуск docker-compose
( https://docs.docker.com/compose/reference/start/ )

Запускает существующие контейнеры для службы.

docker-compose up
( https://docs.docker.com/compose/reference/up/ )

Строит, (повторно) создает, запускает и присоединяется к контейнерам для службы.

Если они еще не запущены, эта команда также запускает все связанные службы.

Команда docker-compose upобъединяет выходные данные каждого контейнера (по сути, запущенного docker-compose logs -f). Когда команда завершается, все контейнеры останавливаются. Запуск docker-compose up -dзапускает контейнеры в фоновом режиме и оставляет их работающими.

Если для службы существуют контейнеры, а конфигурация или образ службы были изменены после создания контейнера, docker-compose upизменения принимаются путем остановки и повторного создания контейнеров (с сохранением подключенных томов). Чтобы Compose не собирал изменения, используйте --no-recreateфлаг.

Полный справочник по интерфейсу командной строки:
https://docs.docker.com/compose/reference/

Луис Лаго
источник
3
обновлена ​​ссылка на ссылку командной строки docker-compose: docs.docker.com/compose/reference * docker-compose up: docs.docker.com/compose/reference/up * docker-compose start: docs.docker.com/compose/reference / start
майкл
18

В часто задаваемых вопросах docker это объясняется очень четко:

В чем разница между запуском, запуском и запуском?

Обычно вы хотите docker-compose up. Используйте upдля запуска или перезапуска всех служб, определенных в файле docker-compose.yml. В «прикрепленном» режиме по умолчанию вы видите все журналы из всех контейнеров. В «отключенном» режиме (-d ) Compose завершает работу после запуска контейнеров, но контейнеры продолжают работать в фоновом режиме.

Команда docker-compose runпредназначена для выполнения «разовых» или «специальных» задач. Ему требуется имя службы, которую вы хотите запустить, и запускать контейнеры только для служб, от которых зависит запущенная служба. Используйте run для запуска тестов или выполнения административных задач, таких как удаление или добавление данных в контейнер тома данных. Команда runдействует так же docker run -ti, как открывает интерактивный терминал для контейнера и возвращает статус выхода, соответствующий статусу выхода процесса в контейнере.

Команда docker-compose startполезна только для перезапуска контейнеров, которые были созданы ранее, но были остановлены. Он никогда не создает новые контейнеры.

Супун Пранит
источник
Чем команда перезапуска отличается от любой из этих - запустить, запустить, запустить?
Наг