Znajduję się w sytuacji, w której chcę tymczasowo wyłączyć usługę w pliku docker-compose
pliku.
Oczywiście mógłbym to skomentować, ale czy jest jakaś opcja, aby po prostu powiedzieć „ enabled: false
”?
Znajduję się w sytuacji, w której chcę tymczasowo wyłączyć usługę w pliku docker-compose
pliku.
Oczywiście mógłbym to skomentować, ale czy jest jakaś opcja, aby po prostu powiedzieć „ enabled: false
”?
--no-deps
na wypadek, gdybyś nie chciał uruchamiać zależności. Wiem, że to nie jest to, czego szukasz, ale jest na odwrót.
docker-compose -f docker-compose.yml -f another-docker-compose.yml up -d
. Możesz sprawdzić wynikowe połączenie Docker Compose za pomocą polecenia config :docker-compose -f docker-compose.yml -f another-docker-compose.yml config
Odpowiedzi:
Możesz po prostu przedefiniować entrypoint
lubcommand
, aby zastąpić to polecenie czymś, co nic nie robi ( /bin/true
)
To spowodowałoby natychmiastowe opuszczenie kontenera, nic nie robiąc.
shadi dodaje w komentarzach następujące wskazówki:
Jeśli nie chcesz, aby usługa w ogóle była budowana, przedefiniuj klucz kompilacji, tak aby wskazywał
Dockerfile
tylko na:
FROM tianon/true
ENTRYPOINT ["/true"]
5andr0 zwraca uwagę w komentarzach do sekcji najwyższego poziomux-disabled:
(pole-jak rozszerzenie)
O wiele wygodniejsze: przenoszenie wyłączonych usług do sekcji najwyższego poziomu
x-disabled:
zamiastservices:
Sekcje z
x-
prefiksem zostaną przeanalizowane, ale zignorowane, jeśli nie zostaną użyte w zamierzony sposób jako pole rozszerzenia.
restart: "no"
aby uniknąć nieskończonych
x-disabled:
zamiastservices:
Możesz to zrobić w docker-compose.override.yaml
pliku.
Ten plik jest automatycznie odczytywany docker-compose
i scalany z plikiem głównym docker-compose.yaml
.
Jeśli masz go wykluczone z Git, każdy programista może dostosować konfigurację (z kilkoma ograniczeniami) bez zmiany oryginału docker-compose.yaml
.
Tak więc usługę foo
można wyłączyć ad hoc, ponownie definiując jej punkt wejścia w 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} "]`
Dodaję następującą dodatkową linię do usługi, którą chcę tymczasowo wyłączyć:
command: echo "{put your service name here} disabled"
Zaczyna się i tak, ale nic nie robi.
command
nie ma wpływu na punkt wejścia. W swoim przykładzie polegasz na tym, że tak entrypoint
jest bash
. Aby uczynić to elastycznym ((niezależnie od wbudowanego entrypoint
), myślę, że musisz przedefiniować punkt wejścia, a nie polecenie.
Nie ma możliwości wyłączenia usługi zdefiniowanej w pliku YAML Compose Docker. Sugestia VonC to dobre obejście. Zobacz poniżej dokumentację docker compose dla dostępnych opcji https://docs.docker.com/compose/compose-file/
Skalowałbym usługę do replik 0 z: deploy: replicas: 0
Niestety, jak stwierdza dokumentacja, działa to tylko z rojem dokerów.
Mam to:
docker-compose up $(yq -r '.services | keys | join(" ")' docker-compose.yml | sed 's/service-name//')
Prymityw, ale dodaj #
na początku każdego wiersza usługi.
docker-compose up
, domyślnie uruchomi wszystkie usługi. Jeśli jednak uruchomiszdocker-compose up myservice
, uruchomi się moja usługa i rzeczy od niej zależne. Konfigurując zależności, możesz sprawić, że zła usługa nie rozpocznie się od tego polecenia. Możesz takżedocker-compose run
skorzystać z usług, które chcesz. Właściwym wyborem może być również podzielenie tego na wiele plików redagowania, aby zapewnić potrzebną elastyczność.