Eski Docker ana makinesine sahip daha yeni docker istemcisi


12

RHEL 6.6 üzerinde çalışan biraz daha eski bir Docker sunucumuz var. Operasyon ekibimiz şu anda iyi desteklenmediği için kolayca yeni sürüme geçemiyoruz. Şu anda bir EPEL deposundan Docker 1.3.2'yi çalıştırıyor. Eğer ssh yaparsam, umarım yolda Docker için altyapı desteğini geliştirmek için yönetimi zorlamama yardımcı olacak kavram kanıtları için ihtiyacım olan her şeyi yapar.

TCP / TLS'de dinlemek için ayarladım ve ona bağlanabiliyorum, ancak yerel docker istemcim tarafından verilen komutları çalıştırmayı reddediyor.

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

Bağlantının kendisinin çalıştığını biliyorum çünkü figçalışıyor:

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

Yeni docker istemcisine, yeni bir docker ana bilgisayarına erişinceye kadar eski docker API sürümünü kullanmasını söyleyebilmemin bir yolu var mı?


RHEL'de bir Docker istemcisi mi kullanıyorsunuz?
Michael Hampton

@MichaelHampton Bu docker kutusuna bağlanan geliştiriciler çeşitli Windows ve OS X iş istasyonlarındadır. Boot2docker yüklü olma eğilimindedirler ve bu ana bilgisayarda gösterilen aynı docker istemcisini kullanmak isterler.
kojiro

İdeal seçim, en son Docker sürümünü izleyen bir Linux dağıtımı kullanmaktır. Şu anda bu Fedora Sunucusu.
Michael Hampton

Operasyon adamlarının şu anda 1.2 gibi görünen ve arttıracak olan RHEL 7'ye yükseltmelerini istediğinizi tahmin ediyorum (Ekstralar kanalında olduğu gibi, Çekirdekten daha hızlı büyüyebilir). Ops ekibiniz bir RHEL 7'yi (Red Hat'in ücretli desteği ile) destekleyemiyorsa, Fedora gibi daha kanama olan bir şeyi kesinlikle destekleyemezler. Geliştiricilerinizin standart bir işletim ortamına kodlama yapmaları gerektiğini kabul etmeleri yeterlidir. Ayrıca bkz. Access.redhat.com/solutions/1408853 "Docker RHEL 7.1'de nasıl desteklenir?"
Cameron Kerr

Yanıtlar:


26

Docker 1.10.0'dan beri, Docker motoru ile Docker istemci iletişimi için kullanılan API Sürümü'nü geçersiz kılma seçeneği vardır.

Sadece DOCKER_API_VERSION ortam değişkenini kullanarak.

Ör .:

$ 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

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

DÜZENLE

Docker 1.13'ten bu yana, CLI geriye dönük olarak geliştirilmiş bir uyumluluğa sahiptir. Https://blog.docker.com/2017/01/whats-new-in-docker-1-13'e göre :

1.13'ten başlayarak, daha yeni CLI'lar eski cinlerle konuşabilir. Ayrıca, yeni bir istemci eski bir arka plan programında desteklenmeyen özellikleri kullanmaya çalışıyorsa uygun hataların döndürülmesi için özellik anlaşması ekliyoruz. Bu, birlikte çalışabilirliği büyük ölçüde geliştirir ve Docker kurulumlarını aynı makineden farklı sürümlerle yönetmeyi çok kolaylaştırır.


1

Sunucuyu kolayca yükseltemiyorsanız, istemcinizi kolayca eski sürüme geçirebilmeniz gerekir. Docker, GitHub'da açık kaynak kodludur . Sürüm 1.3.3, 1.15 istemci API'sındaki son sürümdür. İşte etikete doğrudan bir bağlantı.

Reponun yerel bir klonunu yapın, inşa edin, ikili yapın ve sonra üretilen ikili dosyayı değiştirin:

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 , bir docker kapsayıcısının içindeki (belirli bir sürümün) bir docker istemcisi gibi görünüyor. Şu anda inşa etmekte başarısız gibi görünüyor, ama belki de bu biraz yararlı olabilir .... biraz çaba gerektirebilir, ancak bazı araçlarla docker istemcisinin birden çok sürümünü sağlamak için iyi ölçeklenmelidir.
Cameron Kerr

1
Önceden oluşturulmuş istemcileri doğrudan indirebileceğinizi de keşfettim. URL'yi get.docker.com adresindeki yükleme komut dosyasından türetebilirsiniz . Örneğin, OS X için get.docker.com/builds/Darwin/x86_64/docker-1.3.2'ye ihtiyacım vardı .
kojiro
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.