Wersja w „./docker-compose.yml” nie jest obsługiwana. Możesz zobaczyć ten błąd, ponieważ używasz niewłaściwej wersji pliku tworzenia

90

Oto mój plik docker-compose.yml:

version: '3.1'

services:
  a:
    image: tutum/hello-world
  b:
    image: tutum/hello-world

secrets:
  id: my_password

Jeśli biegnę $ docker-compose-up, dostaję to:

Wersja w „./docker-compose.yml” nie jest obsługiwana. Możesz zobaczyć ten błąd, ponieważ używasz niewłaściwej wersji pliku tworzenia.

Moja wersja docker-compose:

$ docker-compose --version
docker-compose version 1.11.0, build 6de1806

Co tu jest nie tak? Czy moja wersja docker-compose nie powinna obsługiwać wersji 3.1 specyfikacji docker-compose.yml (zgodnie z uwagami do wydania tak)?

Eric
źródło
jaka jest wersja twojego dockera (nie docker compose)?
lvthillo
Docker w wersji 1.13.0, kompilacja 49bf474
Eric,
to docker-composei niedocker compose
Abdou Tahiri
@AbdouTahiri CLI jest docker-composetylko Docker Composetechnologią .. docs.docker.com/compose
lvthillo
4
W obliczu tego samego problemu z wersją "3.6". Mój doker to18.03.0-ce, build 0520e24
Rajeev Ranjan

Odpowiedzi:

90

Robisz wszystko dobrze i to powinno działać. Ale pojawił się błąd w docker-compose 1.11.0, który nie rozpoznał formatu pliku 3.1 jako prawidłowego. (Działa 3.0).

Jest już nowe wydanie docker-compose (1.11.1), które zawiera poprawkę błędu:

Bugfixes

Naprawiono błąd polegający na tym, że format pliku 3.1 nie był rozpoznawany jako prawidłowy przez parser tworzenia

Dlatego poleciłbym uaktualnienie wersji docker-compose, jeśli chcesz używać formatu pliku 3.1.

W tej chwili najbezpieczniejszym sposobem uaktualnienia docker-compose jest usunięcie go i ponowne zainstalowanie.

rm /usr/local/bin/docker-compose

Zainstaluj ponownie:

curl -L https://github.com/docker/compose/releases/download/1.11.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version
docker-compose version 1.11.1, build 7c5d5e4

Teraz nie ma już błędu w formacie pliku. (Nie testowałem z twoim .yml).

docker-compose up
Starting compose_a_1
Starting compose_b_1
lvthillo
źródło
3
Dzięki. Z jakiegoś powodu twoja dawka cmd curl nie działa dla mnie w Ubuntu 16.04. Następnie zaktualizowałem do najnowszej wersji docker-compose, postępując zgodnie z przewodnikiem na oficjalnej stronie internetowej tutaj. docs.docker.com/compose/install , czyli mniej więcej to samo, co powyżej. Ale w cmd curl, ">" zmienia się na "-o".
zhihong
8
Błąd dotyczy również wersji 1.8.0; wersja 1.16.1 jest dostępna i działała doskonale na Ubuntu 16.04. Po prostu popraw składnik wersji powyższej ścieżki, nie można go wyraźnie wkleić w tym komentarzu ze względu na cudzysłowy: /
chrisinmtown
Nie znam powodu, ale curlpolecenie nie jest wykonywane. .. mówi odmowa pozwolenia.
Deepak Sharma
1
Ci, którzy napotykają błąd w uruchomieniu curlpolecenia, spróbuj tego: docs.docker.com/compose/install/#install-compose
Deepak Sharma
1
@DeepakSharma Musisz wykonać polecenia curl i chmod jako użytkownik root (lub użyj sudo)
lvthillo
51

Rozwiązałem ten problem, uaktualniając docker-compose.

Wykonaj poniższe kroki, aby zaktualizować docker-compose w systemie ubuntu16.04

krok 1:

$which docker-compose
/usr/bin/docker-compose

krok 2:

$sudo rm /usr/bin/docker-compose

krok 3:

curl -L https://github.com/docker/compose/releases/download/1.20.0/docker-compose-`uname -s`-`uname -m` -o /usr/bin/docker-compose

krok 4:

chmod +x /usr/bin/docker-compose
Thavaprakash Swaminathan
źródło
To działało dobrze dla mnie w Elementary OS Loki (0.4.1).
J. Afarian,
6
Ponieważ zmiany wersji dockera
DrB
1
Wersja, którą otrzymałem z apt-get, to 1.17, również miała ten problem (Linux Mint 19). Ściągnąłem 1.24.1, podobnie jak te kroki, wydaje się działać. Dzięki!
Will Buck
1
Po usunięciu sudo apt install docker-composepowiedz mi, że mam już wersję, i docker-compose uppowiedz, że nie mam zainstalowanego docker-compose. Dlaczego nie używacie apt? Mam teraz dwa problemy.
Ambroise Rabier
14

Jeśli wersja pliku to 3.7 i pojawi się następujący błąd:

ERROR: Version in "./config.yml" is unsupported. You might be seeing this error because you're using the wrong Compose file version. Either specify a supported version (e.g "2.2" or "3.3") and place your service definitions under the `services` key, or omit the `version` key and place your service definitions at the root of the file to use version 1.

Oto rozwiązanie: -

(1) sudo apt-get remove docker-composeLUBsudo rm /usr/local/bin/docker-compose

(2) sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

(3) sudo chmod +x /usr/local/bin/docker-compose

(4) sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

Mam nadzieję, że to rozwiąże problem.

dPac
źródło
4

Jeśli używasz linux / ubuntu , jest to może oczywiste, ale uważaj, aby uruchomić jako root, np

docker-compose -v

Daje

docker-compose version 1.8.0, build unknown

vs

sudo docker-compose -v 

Daje

docker-compose version 1.17.1, build 6d101fb

Upewnij się również, że docker-compose i docker-machine są aktualne, jak stwierdza @lvthillo

Glen Thompson
źródło
To powinna być właściwa odpowiedź. Jestem w Ubuntu, musiałem użyć polecenia SUDO do pracy
brunoramonalmeida
sudo docker-compose -v daje mi wersję docker-compose 1.8.0, nieznana kompilacja
Julien
Czy tak jest z sudo?
Glen Thompson
-1. Sudo jest złe. Oto alternatywa: docs.docker.com/install/linux/linux-postinstall/ ...
Ligemer
Fajny dodatek, chociaż nie powiedziałbym, że jest „zły”. Możesz edytować odpowiedź, aby dołączyć ją jako dodatek.
Glen Thompson,
2

Zrobiłem to docker-compose --versionprzed wdrożeniem rozwiązania lvthillo i wciąż pojawiały się przestarzałe wersje. Okazało się, że muszę wyczyścić listę hashów, którą trzymała moja powłoka bash. hash -r... mam nadzieję, że przyda się to komuś innemu

brandon
źródło
2

spróbuj odinstalować starą wersję i ponownie zainstalować.

sudo apt remove docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
reboot

powinien wydrukować

docker-compose --version
docker-compose version 1.22.0, build 1719ceb
qwerty
źródło
3
Po co restartować komputer tylko dlatego, że pobrałeś plik?
Soren Bjornstad
1

Nie możemy ci powiedzieć bez oglądania konkretnego błędu, najpierw sprawdź go, uruchamiając to polecenie

docker build . kiedy pojawi się błąd, wyszukaj go w google w moim przypadku był to błąd uprawnień, gdy próbowałem go z sudo, zadziałało.

Mam nadzieję, że to ci pomoże

user10538706
źródło
0

Na osx 10.12.6 sierra

Kroki dla wersji 1.22 lub nowszej

Miałem konkretny problem / niezgodność, w którym nie chciałem całkowicie zaktualizować dockera. Utknąłem w tej chwili na dockerze 17.06.0-ce-mac18. Chciałem więc tylko uaktualnić docker-compose i nic więcej.

Moje kroki:

  • Zidentyfikuj lokalizację docker-compose: which docker-compose
  • Zidentyfikuj wersję docker-compose: docker-compose --version=docker-compose version 1.14.0, build c7bdf9e
  • backup poprzedni docker-compose ?: mv /usr/local/bin/docker-compose /usr/local/bin/docker-compose-bak
  • zamienić curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
  • jeśli chcesz określić najnowszą wersję, po prostu sprawdź https://github.com/docker/compose/releases i zastąp powyższą wersję najnowszą.
  • sprawdź wersję: docker-compose --version=docker-compose version 1.22.0, build f46880f
przewodowy00
źródło