ใหม่นักเทียบท่าไคลเอ็นต์ที่มีโฮสต์ Docker ที่เก่ากว่า


12

เรามีเซิร์ฟเวอร์ Docker ที่เก่ากว่าเล็กน้อยที่ทำงานบน RHEL 6.6 ตอนนี้ทีมของเรายังไม่ได้รับการสนับสนุนอย่างดีดังนั้นเราจึงไม่สามารถอัปเกรดได้อย่างง่ายดาย ตอนนี้มันรัน Docker 1.3.2 จาก repo ของ EPEL ถ้าฉันทำทุกอย่างที่ฉันต้องการสำหรับการพิสูจน์แนวคิดซึ่งหวังว่าจะช่วยฉันผลักดันการจัดการเพื่อปรับปรุงการสนับสนุนโครงสร้างพื้นฐานสำหรับนักเทียบท่าตามท้องถนน

ฉันตั้งค่าให้ฟังบน 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 บน RHEL หรือไม่
Michael Hampton

@MichaelHampton นักพัฒนาที่เชื่อมต่อกับกล่อง docker นี้อยู่ในเวิร์กสเตชัน Windows และ OS X ที่หลากหลาย พวกเขามักจะมีการติดตั้ง boot2docker และต้องการที่จะใช้ไคลเอนต์นักเทียบท่าเดียวกันชี้ไปที่โฮสต์นี้
kojiro

ทางเลือกที่ดีที่สุดคือใช้การกระจาย Linux ซึ่งติดตามเวอร์ชั่น Docker ล่าสุด ในตอนนี้นั่นคือเซิร์ฟเวอร์ Fedora
Michael Hampton

ฉันเดาว่าคุณต้องการให้พวกผู้ปฏิบัติการอัพเกรดเป็น RHEL 7 ซึ่งปัจจุบันดูเหมือนจะเป็น 1.2 และจะเพิ่มขึ้น (เนื่องจากอยู่ในช่องพิเศษเพื่อให้สามารถเติบโตได้เร็วกว่าแกน) หากทีม Ops ของคุณไม่สามารถรองรับ RHEL 7 (ด้วยการสนับสนุนที่จ่ายเงินของ Red Hat) พวกเขาจะไม่สามารถสนับสนุนสิ่งที่มีเลือดออกเช่น Fedora นักพัฒนาของคุณจำเป็นต้องยอมรับว่าพวกเขาจำเป็นต้องใช้รหัสในสภาพแวดล้อมการทำงานมาตรฐาน ดูเพิ่มเติมที่access.redhat.com/solutions/1408853 "นักเทียบท่ารองรับอย่างไรใน RHEL 7.1"
Cameron Kerr

คำตอบ:


26

ตั้งแต่ 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, CLI มีการปรับปรุงความเข้ากันได้ย้อนหลัง ตามhttps://blog.docker.com/2017/01/whats-new-in-docker-1-13 :

เริ่มต้นที่ 1.13 CLIs ที่ใหม่กว่าสามารถพูดคุยกับ daemons รุ่นเก่าได้ เรากำลังเพิ่มการเจรจาต่อรองคุณสมบัติเพื่อให้ข้อผิดพลาดที่เหมาะสมถูกส่งคืนหากลูกค้าใหม่พยายามใช้คุณสมบัติที่ไม่รองรับใน daemon ที่เก่ากว่า สิ่งนี้ช่วยปรับปรุงการทำงานร่วมกันอย่างมากและทำให้ง่ายต่อการจัดการการติดตั้ง Docker ด้วยรุ่นที่แตกต่างจากเครื่องเดียวกัน


1

หากคุณไม่สามารถอัพเกรดเซิร์ฟเวอร์ได้อย่างง่ายดายคุณควรจะดาวน์เกรดไคลเอ็นต์ของคุณได้อย่างง่ายดาย หางเป็นแหล่งที่มาเปิดที่GitHub เวอร์ชัน 1.3.3 เป็นเวอร์ชันสุดท้ายที่มีไคลเอ็นต์ API 1.15 นี่คือลิงค์โดยตรงไปยังแท็ก

เพียงทำการโคลนโลคอลของ repo ทำการ build สร้างไบนารีแล้วสลับไบนารีที่ผลิต:

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ดูเหมือนว่าจะเป็นลูกค้าของนักเทียบท่า (ของรุ่นที่เฉพาะเจาะจง) ภายในคอนเทนเนอร์ของนักเทียบท่า ดูเหมือนว่าจะล้มเหลวในการสร้างในขณะนี้ แต่อาจจะให้ประโยชน์บางอย่าง .... อาจต้องใช้ความพยายามเล็กน้อย แต่ด้วยการใช้เครื่องมือบางอย่างควรปรับขนาดให้ดีขึ้นเพื่อให้ไคลเอนต์นักเทียบท่าหลายรุ่น
คาเมรอน Kerr

1
ฉันค้นพบว่าคุณสามารถดาวน์โหลดไคลเอนต์ที่สร้างไว้ล่วงหน้าได้โดยตรง คุณสามารถได้รับมาจาก URL สคริปต์ติดตั้งที่get.docker.com ตัวอย่างเช่นฉันต้องการget.docker.com/builds/Darwin/x86_64/docker-1.3.2สำหรับ OS X.
kojiro
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.