Я потрапляю в ситуацію, що хочу тимчасово вимкнути службу у docker-compose
файлі.
Звичайно, я міг би це прокоментувати, але чи є варіант просто сказати " enabled: false
"?
Я потрапляю в ситуацію, що хочу тимчасово вимкнути службу у docker-compose
файлі.
Звичайно, я міг би це прокоментувати, але чи є варіант просто сказати " enabled: false
"?
--no-deps
якщо ви не хочете запускати залежності. Я знаю, це не те, що ви шукаєте, а навпаки.
docker-compose -f docker-compose.yml -f another-docker-compose.yml up -d
. Ви можете перевірити отримане об’єднання докера за допомогою команди config :docker-compose -f docker-compose.yml -f another-docker-compose.yml config
Відповіді:
Ви можете просто перевизначити entrypoint
абоcommand
, щоб замінити вказану команду на щось, що нічого не робить ( /bin/true
)
Це призведе до негайного виходу контейнера, нічого не роблячи.
shadi додає наступні поради в коментарях:
Якщо ви взагалі не хочете, щоб служба будувалася, перевизначте ключ побудови, щоб вказати на
Dockerfile
те, що має лише:
FROM tianon/true
ENTRYPOINT ["/true"]
5andr0 зазначає у коментарях розділ верхнього рівняx-disabled:
(подібно до поля розширення)
Набагато зручніше: переміщення служб з обмеженими можливостями до розділу верхнього рівня
x-disabled:
замістьservices:
Розділи з
x-
префіксом будуть проаналізовані, але проігноровані, якщо не використовуватимуться за призначенням як поле розширення.
restart: "no"
щоб уникнути нескінченних перезапусків
x-disabled:
замістьservices:
Ви можете зробити це у docker-compose.override.yaml
файлі.
Цей файл автоматично зчитується docker-compose
та об’єднується в основний docker-compose.yaml
.
Якщо його виключити з Git, кожен розробник може налаштувати конфігурацію (з деякими обмеженнями), не змінюючи оригінал docker-compose.yaml
.
Отже, послугу foo
можна відключити спеціально, перевизначивши її точку входу в docker-compose.override.yaml
:
version: "3"
services:
foo:
entrypoint: ["echo", "Service foo disabled"]
export XXX_ENTRYPOINT=/bin/true
then `entrypoint: [" $ {XXX_ENTRYPOINT: -docker-entrypoint.sh} "]`
Я додаю такий додатковий рядок до служби, яку хочу тимчасово відключити:
command: echo "{put your service name here} disabled"
Це все одно починається, але нічого не робить.
command
значення не впливає на точку входу. У вашому прикладі ви покладаєтесь на те, що entrypoint
це, bash
я думаю. Щоб зробити цю стійку ((незалежно від вбудованої entrypoint
), я думаю, вам потрібно перевизначити точку входу, а не команду.
Немає можливості вимкнути службу, визначену у Docker, щоб створити файл yaml. Пропозиція VonC є хорошим рішенням. Будь ласка, дивіться нижче документацію щодо складання докера, щоб дізнатися про доступні варіанти https://docs.docker.com/compose/compose-file/
Я б масштабував службу до 0 реплік за допомогою: deploy: replicas: 0
На жаль, як зазначено в документації, це працює лише з докер-роєм.
Зрозумів:
docker-compose up $(yq -r '.services | keys | join(" ")' docker-compose.yml | sed 's/service-name//')
Примітивний, але додайте a #
на початку кожного рядка послуги.
docker-compose up
він запустить усі служби за замовчуванням. Однак, якщо ви запустите,docker-compose up myservice
це запустить мою послугу та речі, які від цього залежать. Налаштувавши залежності, ви можете зробити так, щоб погана служба не запускалася з цієї команди. Ви також можете зробити,docker-compose run
щоб отримати лише потрібні послуги. Правильним вибором може бути також розбиття цього на кілька файлів для складання, щоб забезпечити необхідну гнучкість.