Что значит директива «command» в docker-compose?
Директива command
в файле docker-compose.yml
позволяет переопределить команду, которая будет выполнена при запуске контейнера. По умолчанию Docker запускает ту команду, которая указана в инструкции CMD
внутри Dockerfile
образа. Однако, с помощью command
можно задать или изменить эту команду на этапе запуска контейнера через Docker Compose.
Основные случаи использования command
- Переопределение стандартной команды: Например, если образ по умолчанию запускает сервер, а вам нужно выполнить другой скрипт или процесс.
Пример:
- Добавление аргументов к команде: Вы можете дополнять стандартную команду аргументами.
12345services:nginx:image: nginxcommand: ["nginx", "-g", "daemon off;"]
В этом примере команда запускает Nginx в режиме, который не переводит процесс в фон.
- Использование вместо
ENTRYPOINT
: Директиваcommand
заменяет значениеCMD
, но если в образе используетсяENTRYPOINT
, тоcommand
дополняет или переопределяет аргументы дляENTRYPOINT
.Пример:
123456services:myapp:image: some_imageentrypoint: ["/bin/app"]command: ["arg1", "arg2"]- В данном случае итоговая команда будет выглядеть как
/bin/app arg1 arg2
.
Форматы записи
command
может быть записана в двух форматах:- Строка: передаётся как есть.
12command: python app.py - Список: каждый аргумент передаётся отдельно (рекомендуется для сложных команд).
12command: ["python", "app.py", "--debug"]
- В данном случае итоговая команда будет выглядеть как
Примеры
Замена команды
Допустим, вы хотите настроить Redis с нестандартной конфигурацией:
1 2 3 4 5 |
services: redis: image: redis command: ["redis-server", "/etc/redis/redis.conf"] |
Установка специфичного режима
Для приложения с переменной окружения:
1 2 3 4 5 |
services: app: image: myapp command: ["start", "--mode=production"] |
Заключение
Директива command
гибко настраивает запуск контейнера, позволяя изменить или расширить поведение по умолчанию. Это особенно полезно, когда вы работаете с универсальными образами или хотите на лету изменить поведение приложения в контейнере.
Recommended Posts
Что такое docker:dind и как он работает?
22.03.2023