이전 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.