Я потрапляю в ситуацію, що хочу тимчасово вимкнути службу у 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щоб отримати лише потрібні послуги. Правильним вибором може бути також розбиття цього на кілька файлів для складання, щоб забезпечити необхідну гнучкість.