Подтвердить что ты не робот

Должен ли я использовать запуск докеры или запуск?

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

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

4b9b3361

Ответ 1

Как указано в docker-compose run:

Команда, переданная при запуске, переопределяет команду, определенную в конфигурации службы.
Например, если настройка веб-службы начинается с 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.

Ответ 2

Я хотел бы указать, что если вы используете Python с отладчиком pdb:

import pdb; pdb.set_trace()

Он не упадет в оболочку, если вы выполните свой script, используя:

docker-compose up

Однако, если вы используете run, он будет отбрасываться до отладчика, как ожидалось:

docker-compose run