이전 Docker 호스트가있는 최신 Docker 클라이언트


12

RHEL 6.6에서 실행되는 약간 오래된 Docker 서버가 있습니다. 현재 운영 팀에서 제대로 지원하지 않으므로 쉽게 업그레이드 할 수 없습니다. 지금은 EPEL 저장소에서 Docker 1.3.2를 실행합니다. 내가 그것을 훔치면 개념 증명에 필요한 모든 작업을 수행하여 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 버전을 사용하도록 지시 할 수있는 방법이 있습니까?


RHEL 에서 Docker 클라이언트 를 사용 하시겠습니까?
— Michael Hampton

@MichaelHampton이 도커 박스에 연결하는 개발자는 다양한 Windows 및 OS X 워크 스테이션에 있습니다. 그들은 boot2docker를 설치하는 경향이 있으며이 호스트를 가리키는 동일한 도커 클라이언트를 사용하려고합니다.
— kojiro

따라서 이상적인 선택은 최신 Docker 버전을 추적하는 Linux 배포판을 사용하는 것입니다. 현재는 페도라 서버입니다.
— Michael Hampton

Operation 사람들이 현재 1.2로 표시 되는 RHEL 7로 업그레이드하기 를 원하며 (Extras 채널에 있으므로 Core보다 빠르게 성장 할 수 있음) 증가 할 것입니다. Ops 팀이 RHEL 7 (Red Hat의 유료 지원 포함)을 지원할 수없는 경우, Fedora와 같은 최첨단 기술을 확실히 지원할 수 없습니다. 개발자는 표준 운영 환경으로 코딩해야한다는 사실 만 인정하면됩니다. access.redhat.com/solutions/1408853 "RHEL 7.1에서 Docker는 어떻게 지원됩니까?" 도 참조하십시오.
— Cameron Kerr

답변:


26

Docker 1.10.0부터 Docker 엔진과의 Docker 클라이언트 통신에 사용되는 API 버전을 재정의하는 옵션이 있습니다.

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은 1.15 클라이언트 API에서 마지막이었습니다. 태그에 직접 연결되는 링크는 다음과 같습니다 .

repo의 로컬 복제본을 만들고 빌드하고 바이너리를 만든 다음 생성 된 바이너리를 바꾸십시오.

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

registry.hub.docker.com/u/igneoussystems/docker-client 는 도커 컨테이너 내부의 특정 버전의 도커 클라이언트 인 것으로 보입니다. 현재 빌드에 실패한 것 같지만 약간의 유용성을 제공 할 것입니다. 약간의 노력이 필요할 수 있지만 일부 도구를 사용하면 여러 버전의 도커 클라이언트를 제공하도록 확장해야합니다.
— Cameron Kerr

1
사전 빌드 된 클라이언트를 직접 다운로드 할 수도 있음을 발견했습니다. get.docker.com 의 설치 스크립트에서 URL을 파생시킬 수 있습니다 . 예를 들어, OS X의 경우 get.docker.com/builds/Darwin/x86_64/docker-1.3.2 가 필요 했습니다.
— kojiro
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.