Nowszy klient dokera ze starszym hostem Docker

12

Mamy nieco starszy serwer Docker działający na RHEL 6.6. Nasz zespół operacyjny nie jest obecnie dobrze obsługiwany, więc nie możemy łatwo dokonać aktualizacji. W tej chwili działa Docker 1.3.2 z repozytorium EPEL. Jeśli ssh to zrobi, zrobi wszystko, czego potrzebuję do weryfikacji koncepcji, która, mam nadzieję, pomoże mi przyspieszyć zarządzanie w celu ulepszenia wsparcia infrastruktury dla Dockera w dół drogi.

Skonfigurowałem go do nasłuchiwania w TCP / TLS i jestem w stanie się z nim połączyć, ale odmawia uruchamiania poleceń wydanych przez mojego lokalnego klienta dokera.

$ docker version
Client version: 1.4.1
Client API version: 1.16
Go version (client): go1.4
Git commit (client): 5bc2ff8
OS/Arch (client): darwin/amd64
FATA[0000] Error response from daemon: client and server don't have same version (client : 1.16, server: 1.15)

Wiem, że samo połączenie działa, ponieważ figdziała:

$ cat > fig.yml
test:
    image: busybox
$ fig run --rm test sh
/ # hostname -f
084f75fb59d4

Czy jest jakiś sposób, aby powiedzieć nowszemu klientowi dokera, aby używał starszej wersji interfejsu API dokera, dopóki nie będę mógł uzyskać dostępu do nowszego hosta dokera?

kojiro
źródło
Używać klienta Docker na RHEL?
Michael Hampton
@MichaelHampton Programiści podłączający się do tego okna dokowanego znajdują się na różnych stacjach roboczych Windows i OS X. Zwykle mają zainstalowany boot2docker i chcieliby używać tego samego klienta dokera wskazanego na tym hoście.
kojiro
Idealnym wyborem jest zatem użycie dystrybucji Linuksa, która śledzi najnowszą wersję Dockera. W tej chwili jest to serwer Fedora.
Michael Hampton
Zgaduję, że chciałbyś, aby faceci z Operacji zaktualizowali system do wersji RHEL 7, która obecnie wydaje się wynosić 1,2, i będzie rosła (tak jak w kanale Dodatki, więc może rosnąć szybciej niż Rdzeń). Jeśli twój zespół operacyjny nie może obsłużyć RHEL 7 (z płatnym wsparciem Red Hata), to z pewnością nie może poprzeć czegoś bardziej krwawiącego, takiego jak Fedora. Twoi programiści muszą po prostu zaakceptować konieczność kodowania do standardowego środowiska operacyjnego. Zobacz także access.redhat.com/solutions/1408853 „W jaki sposób Docker jest obsługiwany w RHEL 7.1?”
Cameron Kerr,

Odpowiedzi:

26

Od wersji Docker 1.10.0 istnieje możliwość zastąpienia wersji interfejsu API używanej do komunikacji klienta Docker z silnikiem Docker.

Wystarczy użyć zmiennej środowiskowej DOCKER_API_VERSION.

Dawny.:

$ docker version
Client:
 Version:      1.10.0
 API version:  1.22
 Go version:   go1.5.3
 Git commit:   590d510
 Built:        Fri Feb  5 08:21:41 UTC 2016
 OS/Arch:      darwin/amd64
Error response from daemon: client is newer than server (client API version: 1.22, server API version: 1.21)

$ DOCKER_API_VERSION=1.21 docker version
Client:
 Version:      1.10.0
 API version:  1.21
 Go version:   go1.5.3
 Git commit:   590d510
 Built:        Fri Feb  5 08:21:41 UTC 2016
 OS/Arch:      darwin/amd64

Server:
 Version:      1.9.1
 API version:  1.21
 Go version:   go1.4.3
 Git commit:   a34a1d5
 Built:        Fri Nov 20 17:56:04 UTC 2015
 OS/Arch:      linux/amd64

Odniesienie: https://docs.docker.com/engine/reference/commandline/cli/#environment-variables

EDYTOWAĆ

Od wersji Docker 1.13 CLI ma ulepszoną kompatybilność wsteczną. Według https://blog.docker.com/2017/01/whats-new-in-docker-1-13 :

Począwszy od wersji 1.13, nowsze interfejsy CLI mogą komunikować się ze starszymi demonami. Dodajemy również negocjacje funkcji, aby zwracać prawidłowe błędy, jeśli nowy klient próbuje użyć funkcji nieobsługiwanych w starszym demonie. To znacznie poprawia interoperacyjność i znacznie ułatwia zarządzanie instalacjami Docker z różnymi wersjami z tego samego komputera.

Enderson Maia
źródło
1

Jeśli nie możesz łatwo zaktualizować serwera, powinieneś być w stanie łatwo obniżyć wersję swojego klienta. Docker jest open source w GitHub . Wersja 1.3.3 była ostatnia z interfejsem API klienta 1.15. Oto bezpośredni link do tagu.

Po prostu stwórz lokalny klon repozytorium, stwórz build, binarnie, a następnie zamień wyprodukowany plik binarny:

sudo service docker stop ; sudo cp $(which docker) $(which docker)_ ; sudo cp ./bundles/1.3.3-dev/binary/docker-1.3.3-dev $(which docker);sudo service docker start
allingeek
źródło
register.hub.docker.com/u/igneoussystems/docker-client wydaje się być klientem dokera (określonej wersji) w kontenerze dokera. W tej chwili wydaje się, że nie można go zbudować, ale być może przydałoby się to trochę użyteczności ... może wymagać trochę wysiłku, ale przy niektórych narzędziach powinno się dobrze skalować, aby zapewnić wiele wersji klienta dokera.
Cameron Kerr
1
Odkryłem, że możesz również pobierać bezpośrednio wbudowane klienty. Możesz uzyskać adres URL ze skryptu instalacyjnego na get.docker.com . Na przykład potrzebowałem get.docker.com/builds/Darwin/x86_64/docker-1.3.2 dla OS X.
kojiro