Ich befinde mich in der Situation, dass ich einen Dienst vorübergehend in einer docker-compose
Datei deaktivieren möchte .
Natürlich könnte ich es auskommentieren, aber gibt es eine Möglichkeit, einfach " enabled: false
" zu sagen ?
Ich befinde mich in der Situation, dass ich einen Dienst vorübergehend in einer docker-compose
Datei deaktivieren möchte .
Natürlich könnte ich es auskommentieren, aber gibt es eine Möglichkeit, einfach " enabled: false
" zu sagen ?
--no-deps
falls Sie die Abhängigkeiten nicht starten möchten. Ich weiß, es ist nicht das, wonach Sie suchen, aber es ist umgekehrt.
docker-compose -f docker-compose.yml -f another-docker-compose.yml up -d
. Sie können die resultierende Zusammenstellung der Docker-Komposition mit dem Befehl config überprüfen :docker-compose -f docker-compose.yml -f another-docker-compose.yml config
Antworten:
Sie können einfach das entrypoint
odercommand
neu definieren , um den Befehl durch etwas zu ersetzen, das nichts bewirkt ( /bin/true
)
Das würde den Container sofort verlassen und nichts tun.
Shadi fügt die folgenden Tipps in den Kommentaren hinzu:
Wenn Sie nicht möchten, dass der Service überhaupt erstellt wird, definieren Sie den Build-Schlüssel neu, um auf einen zu verweisen
Dockerfile
, der nur Folgendes enthält:
FROM tianon/true
ENTRYPOINT ["/true"]
5andr0 weist in den Kommentaren auf den Abschnittx-disabled:
der obersten Ebene hin (eine feldähnliche Erweiterung)
Weitaus bequemer: Verschieben von Diensten für Behinderte in den Bereich der obersten Ebene
x-disabled:
anstelle vonservices:
Abschnitte mit dem
x-
Präfix werden analysiert, aber ignoriert, wenn sie nicht in der vorgesehenen Weise als Erweiterungsfeld verwendet werden.
restart: "no"
, um unendliche Neustarts zu vermeiden
x-disabled:
anstelle vonservices:
Sie können es in einer docker-compose.override.yaml
Datei tun .
Diese Datei wird automatisch von gelesen docker-compose
und in die Hauptdatei eingefügt docker-compose.yaml
.
Wenn Sie es von Git ausgeschlossen haben, kann jeder Entwickler die Konfiguration (mit einigen Einschränkungen) optimieren, ohne das Original zu ändern docker-compose.yaml
.
Daher kann der Dienst foo
ad-hoc deaktiviert werden, indem sein Einstiegspunkt neu definiert wird in docker-compose.override.yaml
:
version: "3"
services:
foo:
entrypoint: ["echo", "Service foo disabled"]
export XXX_ENTRYPOINT=/bin/true
dann `entrypoint: [" $ {XXX_ENTRYPOINT: -docker-entrypoint.sh} "]`
Ich füge dem Dienst, den ich vorübergehend deaktivieren möchte, die folgende zusätzliche Zeile hinzu:
command: echo "{put your service name here} disabled"
Es fängt trotzdem an, macht aber nichts.
command
hat keine Auswirkungen auf den Einstiegspunkt. In Ihrem Beispiel verlassen Sie sich darauf, dass das entrypoint
ist, bash
denke ich. Um dies belastbar zu machen ((unabhängig vom eingebauten entrypoint
)), müssen Sie den Einstiegspunkt und nicht den Befehl neu definieren.
Es gibt keine Möglichkeit, einen in Docker compose yaml file definierten Dienst zu deaktivieren. Der Vorschlag von VonC ist eine gute Problemumgehung. Die verfügbaren Optionen finden Sie unten in der Dokumentation zum Erstellen von Docker. Https://docs.docker.com/compose/compose-file/
Ich würde den Dienst auf 0 Replikate skalieren mit: deploy: replicas: 0
Leider funktioniert dies, wie in der Dokumentation angegeben, nur mit Docker-Schwarm.
Primitiv, aber fügen Sie #
am Anfang jeder Zeile des Dienstes ein hinzu.
docker-compose up
, werden standardmäßig alle Dienste gestartet. Wenn Sie es jedoch ausführendocker-compose up myservice
, wird myservice und Dinge, die davon abhängen, gestartet. Durch Einrichten der Abhängigkeiten können Sie festlegen, dass der fehlerhafte Dienst nicht mit diesem Befehl beginnt. Sie können auchdocker-compose run
nur die gewünschten Dienste in Anspruch nehmen. Die richtige Wahl kann auch darin bestehen, diese in mehrere Erstellungsdateien aufzuteilen, um Ihnen die Flexibilität zu ermöglichen, die Sie benötigen.