Ответ 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
.