Более новый докер-клиент со старым хостом Docker

12

У нас есть немного более старый сервер Docker, работающий на RHEL 6.6. Это не очень хорошо поддерживается нашей операционной командой, поэтому мы не можем легко обновиться. Прямо сейчас он запускает Docker 1.3.2 из репозитория EPEL. Если я использую ssh, он делает все, что мне нужно для проверки концепции, которая, надеюсь, поможет мне подтолкнуть руководство к улучшению поддержки инфраструктуры Docker в будущем.

Я настроил его на прослушивание TCP / TLS, и я могу подключиться к нему, но он отказывается запускать команды, заданные моим локальным док-клиентом.

$ 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)

Я знаю, что само соединение работает, потому что figработает:

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

Есть ли какой-нибудь способ, которым я могу сказать более новому клиенту докера использовать более старую версию докера API, пока я не получу доступ к более новому хосту докера?

Кодзиро
источник
Использовать Docker- клиент на RHEL?
Майкл Хэмптон
@MichaelHampton Разработчики, подключающиеся к этой док-станции, работают на различных рабочих станциях Windows и OS X. Они, как правило, имеют установленный boot2docker и хотели бы использовать тот же докер-клиент, указанный на этом хосте.
Кодзиро
Таким образом, идеальным выбором является использование дистрибутива Linux, который отслеживает последнюю версию Docker. На данный момент это Fedora Server.
Майкл Хэмптон
Я предполагаю, что вы хотели бы, чтобы ребята из Operation обновились до RHEL 7, который в настоящее время равен 1,2, и будет увеличиваться (как в канале Extras, поэтому может расти быстрее, чем Core). Если ваша команда Ops не может поддерживать RHEL 7 (с платной поддержкой Red Hat), то они, конечно, не могут поддерживать что-то более передовое, такое как Fedora. Ваши разработчики просто должны признать, что им нужно кодировать в стандартной операционной среде. См. Также access.redhat.com/solutions/1408853 «Как Docker поддерживается в RHEL 7.1?»
Кэмерон Керр

Ответы:

26

Начиная с Docker 1.10.0, существует возможность переопределения версии API, используемой для связи клиента Docker с механизмом Docker.

Просто с помощью переменной окружения DOCKER_API_VERSION.

Напр .:

$ 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

Ссылка: https://docs.docker.com/engine/reference/commandline/cli/#environment-variables

РЕДАКТИРОВАТЬ

Начиная с Docker 1.13, CLI имеет улучшенную обратную совместимость. Согласно https://blog.docker.com/2017/01/whats-new-in-docker-1-13 :

Начиная с версии 1.13, новые CLI могут взаимодействовать со старыми демонами. Мы также добавляем согласование функций, чтобы возвращались правильные ошибки, если новый клиент пытается использовать функции, не поддерживаемые более старым демоном. Это значительно улучшает совместимость и значительно упрощает управление установками Docker с разными версиями с одного компьютера.

Эндерсон Майя
источник
1

Если вы не можете легко обновить сервер, вы сможете легко понизить версию своего клиента. Docker с открытым исходным кодом на GitHub . Версия 1.3.3 была последней с клиентским API 1.15. Вот прямая ссылка на тег.

Просто сделайте локальный клон репозитория, сделайте сборку, сделайте бинарный файл и затем обменяйте полученный бинарный файл:

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
источник
registry.hub.docker.com/u/igneoussystems/docker-client кажется докерным клиентом (определенной версии) внутри докерного контейнера. Кажется, что в данный момент не удается собрать, но, возможно, это даст некоторую полезность ... может потребовать немного усилий, но с некоторыми инструментами должно хорошо масштабироваться, чтобы обеспечить несколько версий док-клиента.
Кэмерон Керр
1
Я обнаружил, что вы также можете загружать готовые клиенты напрямую. Вы можете получить URL из сценария установки на get.docker.com . Например, мне нужно было получить get.docker.com/builds/Darwin/x86_64/docker-1.3.2 для OS X.
Кодзиро