ข้อผิดพลาดของ Docker: ไคลเอนต์และเซิร์ฟเวอร์ไม่มีเวอร์ชันเดียวกัน


84

เนื่องจากฉันเพิ่งอัปเดต Docker เป็น 1.1.0 ฉันจึงได้รับ:

การตอบสนองข้อผิดพลาดจาก daemon: ไคลเอนต์และเซิร์ฟเวอร์ไม่มีเวอร์ชันเดียวกัน (ไคลเอนต์: 1.13 เซิร์ฟเวอร์: 1.12)

คุณรู้วิธีแก้ไขปัญหานี้หรือไม่?

ฉันเปลี่ยนกลับไปที่ 1.0.1 และทุกอย่างใช้งานได้อีกครั้ง


ฉันมีปัญหาเดียวกันโดยใช้boot2docker. นั่นเป็นกรณีของคุณด้วยหรือไม่?
sigmus

2
ใช่ฉันใช้ boot2docker ด้วย หลังจากถอนการติดตั้งนักเทียบท่าและติดตั้งอีกครั้ง (ไม่ใช่ 'ติดตั้งใหม่') มันจะทำงานอีกครั้ง ชงถอนการติดตั้งนักเทียบท่า && ชงติดตั้งนักเทียบท่า
soenke

4
บางทีคุณควรแก้ไขชื่อ / คำถามเพื่อให้ชัดเจนว่าเป็นboot2dockerปัญหา (เพื่อใช้อ้างอิงในอนาคต)
sigmus

ปลั๊กไร้ยางอาย: เพื่อนและฉันรวบรวมเครื่องมือที่เรียกว่าDocker Version Managerเพื่อช่วยในระยะสั้น
Kyle Kelley

คำตอบ:


127

ดูเหมือนว่าคุณต้องอัปเกรด VM หลังจากติดตั้ง boot2docker:

หากคุณกำลังอัปเกรดจาก boot2docker 0.12 ขึ้นไปคุณสามารถอัปเดตเครื่องเสมือนที่มีอยู่ของคุณได้ (หลังจากอัปเกรดโดยใช้ตัวติดตั้ง) โดยใช้ boot2docker stop && boot2docker download && boot2docker up - และคุณจะไม่สูญเสียข้อมูลที่มีอยู่

( https://github.com/boot2docker/osx-installer/releases/tag/v1.1.0 )


3
ยังชงถอนการติดตั้ง docker && brew install
docker

5
คุณไม่จำเป็นต้องใช้เครื่องมือบรรทัดคำสั่งของนักเทียบท่าเวอร์ชันชงอีกต่อไป Boot2Docker มีเวอร์ชันที่เหมาะสม
Abel Muiño

มีAn error occurred trying to connect: Get https://192.168.59.103:2376/v1.19/containers/json?all=1: x509: certificate is valid for 127.0.0.1, 10.0.2.15, not 192.168.59.103: /
Ain Tohvri

1
ฉันประสบปัญหาเกี่ยวกับใบรับรองนี้ด้วย ฉันวิ่งboot2docker deleteแล้วboot2docker initมันก็เริ่มทำงาน
Dean Wampler

1
เพื่อนและฉันรวบรวมเครื่องมือที่เรียกว่าDocker Version Managerเพื่อช่วยในระยะสั้น
Kyle Kelley

19

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

ในการแก้ไขปัญหานี้ให้เริ่มบริการใหม่:

sysV init:

service docker restart

systemd:

systemctl daemon-reload

systemctl restart docker


1
สำหรับsystemdก็จะแนะนำให้ทำsystemctl daemon-reloadก่อนsystemctl restart docker
baldrs

ดูเหมือนว่าคำตอบที่ง่ายที่สุดคือคำตอบที่ดีที่สุด :)
Dariss

13

ในกรณีที่คุณใช้docker-machineเพื่อจัดการเครื่องที่ใช้ VirtualBox ในเครื่องการแก้ปัญหานั้นง่ายพอ ๆ กับ boot2docker:

docker-machine upgrade MACHINE_NAME

ระบบจะขอdocker-machineให้ดาวน์โหลดเวอร์ชันล่าสุดboot2docker.isoและวางเป็นระบบไฟล์รูทใหม่ใน VM ที่อัปเกรดแล้ว

อย่างไรก็ตามเครื่องเทียบท่าที่ได้รับการสนับสนุน VirtualBox มีระบบไฟล์รูทแบบอ่านอย่างเดียว นั่นหมายความว่าจะไม่สามารถอัปเดตด้วยตนเองใด ๆ ที่รอดจากการรีบูตเครื่อง นั่นเป็นเรื่องแปลกใจสำหรับฉัน


12

ฉันมี boot2docker, docker และ virtual box เวอร์ชันล่าสุด แต่ยังได้รับข้อความนี้ ดูเหมือนว่าการวิ่งbrew upgrade boot2dockerไม่ใช่ความคิดที่ดีที่สุด เมื่อเรียกใช้boot2docker upgradeฉันถูกขอให้ตั้งค่าตัวแปรสภาพแวดล้อมจำนวนมากจากนั้นก็ใช้ได้กับฉัน

Boot2docker ขอให้ฉันตั้งค่าสิ่งเหล่านี้ (ดูบรรทัดสุดท้าย):

$ boot2docker upgrade
Latest release for boot2docker/boot2docker is v1.3.0
Downloading boot2docker ISO image...
Success: downloaded https://github.com/boot2docker/boot2docker/releases/download/v1.3.0/boot2docker.iso
    to /Users/.../.boot2docker/boot2docker.iso
Waiting for VM and Docker daemon to start...
.........oooooooooooooo
Started.
Writing /Users/.../.boot2docker/certs/boot2docker-vm/ca.pem
Writing /Users/.../.boot2docker/certs/boot2docker-vm/cert.pem
Writing /Users/.../.boot2docker/certs/boot2docker-vm/key.pem

To connect the Docker client to the Docker daemon, please set:
    export DOCKER_HOST=tcp://192.168.59.103:2376
    export DOCKER_CERT_PATH=/Users/.../.boot2docker/certs/boot2docker-vm
    export DOCKER_TLS_VERIFY=1

เป็นไปได้ที่จะตัดและวางทั้งสามบรรทัดในครั้งเดียวลงในเทอร์มินัลของคุณ

เพื่อตรวจสอบว่าถูกต้อง:

$ env

11

ฉันพยายามสอบถามเซิร์ฟเวอร์ Docker ด้วยไคลเอนต์ล่าสุด:

  • เวอร์ชันเซิร์ฟเวอร์ API: 1.21
  • Client API เวอร์ชัน 1.22

ทางออกสำหรับฉันคือ:

export DOCKER_API_VERSION=1.21

อ้างอิง: https://docs.docker.com/engine/reference/commandline/cli/


1
ขอบคุณ! สิ่งนี้ช่วยแก้ปัญหาของฉัน
MajiK

1
ความจริงที่ว่าโปรโตคอลนักเทียบท่าเป็นเวอร์ชันและเข้ากันได้แบบย้อนหลังจะต้องไม่ได้รับการบันทึกไว้อย่างดีหรือมองเห็นได้เพียงพอเนื่องจากจำนวนคำตอบที่ (เข้าใจได้) ไปที่ความยาวทุกประเภทเพื่ออัปเกรดนักเทียบท่าในสถานการณ์ต่างๆ ...
Marcello Romani

3

คำตอบที่ถูกต้องที่นี่เก่ามาก(เทียบท่าได้เปลี่ยนชื่อ boot2docker จะเทียบท่าเครื่องจักรและเพิ่มบางฟังก์ชันการทำงานมากขึ้นไป)

อย่างไรก็ตามฉันประสบปัญหาเดียวกันและใช้เวลาประมาณ 3 วันในการแก้ไข :(

นี่คือวิธีแก้ปัญหา

1) ค้นหาตำแหน่งของไฟล์ boot2docker.iso

sudo find ~/ -name 'boot2docker.iso'

2) ลบboot2docker.isoไฟล์หลังจากทำการสำรองข้อมูล

/Users/{user}/.docker/machine/cache/boot2docker.iso

3) ลบ docker vm ของคุณ

docker-machine rm {default}

สิ่งนี้ควรลบสิ่งนั้นด้วย:

/Users/{user}/.docker/machine/machines/default/boot2docker.iso

4) สร้างนักเทียบท่าใหม่ vm

docker-machine create --driver virtualbox default

สิ่งนี้จะดาวน์โหลดใหม่boot2docker.isoก่อนจากนั้นใช้เพื่อสร้าง vm ของคุณ

ตอนนี้ควรแก้ไข :)

แต่

หากคุณได้รับข้อผิดพลาดที่นี่เช่น:

Running pre-create checks...
(mega-docker) No default Boot2Docker ISO found locally, downloading the latest release...
Error with pre-create check: "Get https://api.github.com/repos/boot2docker/boot2docker/releases/latest: dial tcp: lookup api.github.com on 192.168.0.1:53: read udp 192.168.0.103:53947->192.168.0.1:53: i/o timeout"

ลองดาวน์โหลดboot2docker.isoไฟล์ด้วยตนเองโดยไปที่https://api.github.com/repos/boot2docker/boot2docker/releases/latestจากนั้นคลิกที่ไฟล์html_urlและเลือกดาวน์โหลดไฟล์ในที่สุด

เมื่อคุณได้รับไฟล์และวางด้วยตนเอง /Users/{user}/.docker/machine/cache/

ในที่สุดก็รันคำสั่งนี้อีกครั้ง docker-machine create --driver virtualbox default



2

สิ่งเดียวที่ใช้ได้ผลสำหรับฉันคือการลบอิมเมจ boot2docker ออกจาก VirtualBox จากนั้นลบ~/.boot2dockerโฟลเดอร์อย่างสมบูรณ์และในที่สุดก็ทำงานboot2docker initอีกครั้ง


1

boot2docker ลบ

boot2docker init

ทำงานให้ฉัน หยุด / เริ่ม deamon ก่อนและหลังจากนั้นแน่นอน


1

สิ่งนี้ใช้ได้กับฉัน: มันเพียงแค่ปิด vm ลงลบและสร้างใหม่และเริ่มต้นขึ้นอีกครั้ง มันเรียกใช้ shellinit อีกครั้งเพื่อให้ตัวแปร ENV ของคุณได้รับการตั้งค่าด้วยที่อยู่ IP ที่ถูกต้องเมื่อมันกลับมา

$ boot2docker poweroff && \
    boot2docker delete && \
    boot2docker init && \
    boot2docker up
$ eval `boot2docker shellinit`

0

ฉันมี boot2docker เวอร์ชันล่าสุด (v1.7.1) และได้รับข้อผิดพลาดเซิร์ฟเวอร์ไคลเอ็นต์ไม่ตรงกัน จากนั้นฉันก็วิ่งboot2docker upgradeและมันแก้ปัญหาได้


0

วิธีแก้ปัญหาของฉันคือทำการปิด> ปิดเครื่องบน Docker VM ใน VirtualBox แล้วรีสตาร์ท Kitematic สิ่งนี้แก้ไขให้ฉัน


0

ฉันพบว่าเวอร์ชันในการชงนั้นล้าสมัยเมื่อเทียบกับเวอร์ชันบนเว็บไซต์ docker.io ดังนั้นฉันคิดว่าวิธีที่ดีที่สุดคือไปที่เว็บไซต์และดาวน์โหลดไฟล์ติดตั้ง


0

คำตอบที่ตอบได้:

หากคุณมาโดยมีเบิ้ลและไม่ boot2docker นี่เป็นวิธีการแก้: ใช้docker_api_version: autoอาร์กิวเมนต์

- name: Mongo data container
  docker:
    docker_api_version: auto
    name: mongo-primary-dc
    image: debian:wheezy
    state: present
    volumes:
    - /data

ฉันเดาว่าเหตุผลก็คือโมดูล docker-py ที่ Ansible ใช้มักจะไม่อยู่ในเวอร์ชันเดียวกับที่เก็บ apt-get ของ Ubuntu

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.