Klien buruh pelabuhan baru dengan host Docker yang lebih lama

12

Kami memiliki server Docker yang sedikit lebih lama berjalan di RHEL 6.6. Itu tidak didukung dengan baik oleh tim operasi kami saat ini, jadi kami tidak dapat memutakhirkannya dengan mudah. Sekarang ini menjalankan Docker 1.3.2 dari repo EPEL. Jika saya ssh di dalamnya melakukan semua yang saya butuhkan untuk proof-of-concept yang mudah-mudahan akan membantu saya mendorong manajemen untuk meningkatkan dukungan infrastruktur untuk Docker di jalan.

Saya mengaturnya untuk mendengarkan pada TCP / TLS, dan saya dapat terhubung dengannya, tetapi ia menolak untuk menjalankan perintah yang diberikan oleh klien buruh pelabuhan lokal saya.

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

Saya tahu koneksi itu sendiri berfungsi karena figberfungsi:

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

Apakah ada cara saya dapat memberitahu klien buruh pelabuhan yang lebih baru untuk menggunakan versi API buruh pelabuhan yang lebih lama sampai saya dapat mengakses ke host buruh pelabuhan yang lebih baru?

kojiro
sumber
Gunakan klien Docker di RHEL?
Michael Hampton
@MichaelHampton Pengembang yang tersambung ke kotak buruh pelabuhan ini ada di berbagai workstation Windows dan OS X. Mereka cenderung menginstal boot2docker dan ingin menggunakan klien buruh pelabuhan yang sama dengan menunjuk host ini.
kojiro
Pilihan ideal, kemudian, adalah menggunakan distribusi Linux yang melacak versi Docker terbaru. Saat ini, itulah Server Fedora.
Michael Hampton
Saya menduga bahwa Anda ingin orang-orang Operasi untuk meningkatkan ke RHEL 7, yang saat ini tampaknya 1.2, dan akan bertambah (seperti di saluran Ekstra, sehingga dapat tumbuh lebih cepat daripada Core). Jika tim Ops Anda tidak dapat mendukung RHEL 7 (dengan dukungan berbayar Red Hat), maka mereka tentu tidak dapat mendukung sesuatu yang lebih berdarah seperti Fedora. Pengembang Anda hanya perlu menerima bahwa mereka perlu kode ke lingkungan operasi standar. Lihat juga access.redhat.com/solutions/1408853 "Bagaimana Docker didukung di RHEL 7.1?"
Cameron Kerr

Jawaban:

26

Sejak Docker 1.10.0, ada opsi untuk mengganti Versi API yang digunakan untuk komunikasi klien Docker dengan mesin Docker.

Hanya dengan menggunakan variabel lingkungan DOCKER_API_VERSION.

Ex.:

$ 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

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

EDIT

Sejak Docker 1.13, CLI memiliki kompatibilitas mundur yang ditingkatkan. Menurut https://blog.docker.com/2017/01/whats-new-in-docker-1-13 :

Dimulai dengan 1.13, CLI yang lebih baru dapat berbicara dengan daemon yang lebih lama. Kami juga menambahkan negosiasi fitur sehingga kesalahan yang tepat dikembalikan jika klien baru berusaha menggunakan fitur yang tidak didukung dalam daemon yang lebih lama. Ini sangat meningkatkan interoperabilitas dan membuatnya lebih mudah untuk mengelola pemasangan Docker dengan versi yang berbeda dari mesin yang sama.

Enderson Maia
sumber
1

Jika Anda tidak dapat dengan mudah meningkatkan server, Anda harus dapat dengan mudah menurunkan versi klien Anda. Docker adalah open source di GitHub . Versi 1.3.3 adalah yang terakhir dengan API klien 1,15. Berikut ini tautan langsung ke tag.

Cukup buat klon lokal dari repo, buat build, buat biner, lalu tukar biner yang dihasilkan:

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
sumber
registry.hub.docker.com/u/igneoussystems/docker-client tampaknya merupakan klien buruh pelabuhan (versi tertentu) di dalam wadah buruh pelabuhan. Tampaknya gagal membangun pada saat ini, tetapi mungkin itu akan memberikan manfaat .... mungkin memerlukan sedikit usaha tetapi dengan beberapa alat harus skala dengan baik untuk menyediakan beberapa versi dari klien buruh pelabuhan.
Cameron Kerr
1
Saya menemukan Anda juga dapat mengunduh klien yang sudah dibuat sebelumnya secara langsung. Anda dapat memperoleh URL dari skrip instal di get.docker.com . Sebagai contoh, saya membutuhkan get.docker.com/builds/Darwin/x86_64/docker-1.3.2 untuk OS X.
kojiro