У нас есть немного более старый сервер 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 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, в интерфейсе командной строки улучшена обратная совместимость. В соответствии с https://blog.docker.com/2017/01/whats-new-in-docker-1-13 :
Начиная с версии 1.13, новые интерфейсы командной строки могут взаимодействовать со старыми демонами. Мы также добавляем согласование функций, чтобы возвращать правильные ошибки, если новый клиент пытается использовать функции, не поддерживаемые старым демоном. Это значительно улучшает взаимодействие и упрощает управление установками Docker с разными версиями с одного компьютера.
Если вы не можете легко обновить сервер, вы сможете легко понизить версию своего клиента. 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