Docker-Compose ไม่สามารถเชื่อมต่อกับ Docker Daemon


120

ฉันได้รับข้อความแสดงข้อผิดพลาดว่าฉันไม่สามารถเชื่อมต่อกับ Docker daemon ฉันได้ตรวจสอบคำตอบของคนอื่นที่มีปัญหาคล้ายกัน แต่ไม่ได้ช่วยอะไร ฉันใช้ Ubuntu เวอร์ชัน 15.10 ฉันจะพยายามให้ข้อมูลทั้งหมดที่ฉันมี

root@# docker-compose -f docker-compose-deps.yml up -d
ERROR: Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?

If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable.

เวอร์ชัน Docker

root@# sudo docker     version
Client:
Version:      1.9.1
API version:  1.21
Go version:   go1.4.2
Git commit:   a34a1d5
Built:        Fri Nov 20 13:20:08 UTC 2015
OS/Arch:      linux/amd64
Cannot connect to the Docker daemon. Is the docker daemon running on this host?

เวอร์ชัน Docker-Compose

root@# docker-compose --version
docker-compose version 1.5.2, build 7240ff3

นี่คือสิ่งที่จะเกิดขึ้นหากฉันพยายามหยุดหรือเริ่มบริการ ...

root@# sudo service docker stop
stop: Unknown instance: 
root@# sudo service   docker start
docker start/running, process 5375

ถ้าฉันวิ่ง ps aux | grep docker

root@# ps aux | grep docker
root      4233  0.0  0.0  13692  2204 pts/15   S+   10:27   0:00 grep --color=auto docker

ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมอย่างมาก. โปรดแจ้งให้เราทราบหากคุณต้องการข้อมูลอีกต่อไป


1
กรุณาอย่าทำลายกระทู้ของคุณ เมื่อคุณโพสต์คำถามแล้วคุณได้ให้สิทธิ์การใช้งานเนื้อหาแก่ชุมชน Stack Overflow โดยรวม (ภายใต้ใบอนุญาต CC-by-SA) หากคุณต้องการยกเลิกการเชื่อมโยงโพสต์นี้จากบัญชีของคุณโปรดดูเส้นทางที่เหมาะสมสำหรับคำขอยกเลิกการเชื่อมโยงคืออะไร .
Bugs

คำตอบ:


272

ฉันมีข้อผิดพลาดเดียวกันหลังจาก 15 นาทีของการดีบัก ปรากฎว่าสิ่งที่ต้องการคือsudo:) ลองดู [Create a Docker group] ที่นี่https://docs.docker.com/engine/installation/linux/ubuntulinux/เพื่อกำจัดคำนำหน้า sudo


36
พวกเขาต้องการข้อผิดพลาดที่ดีกว่า = / คำถามนี้มีผู้เข้าชม 13,000 ครั้ง
โจนาธาน

4
ผู้ชายคุณประหยัดเวลาได้ประมาณ 30 ชั่วโมงสำหรับผู้ที่โหวตและอาจเป็นเพียง 1% ของเวลาที่คุณบันทึกไว้เท่านั้น
vak

5
การแก้ไขที่แท้จริงคือการสร้างกลุ่มนักเทียบท่าในขณะที่sudoเป็นเพียงวิธีแก้ปัญหา / แฮ็คในความคิดของฉัน เนื่องจากส่วนการสร้างกลุ่มไม่ได้อธิบายไว้ที่นี่มีเพียงลิงก์เท่านั้นที่ได้รับและเนื้อหาของลิงก์นั้นเปลี่ยนไปฉันถือว่านี่เป็นคำตอบที่เชื่อมโยงอย่างเดียวและตอนนี้มันก็ไร้ประโยชน์โดยพื้นฐานแล้ว (สำหรับส่วนการแก้ไขจริง) คุณอาจเพิ่มคำอธิบายวิธีเพิ่มกลุ่มนั้นได้ไหม
hoijui

3
ฉันคิดว่าsudoเป็นความคิดที่ไม่ดีเช่นกัน ดูเอกสาร Docker สำหรับจัดการ Docker ในฐานะผู้ใช้ที่ไม่ใช่ root: docs.docker.com/engine/installation/linux/linux-postinstall/…
jwhitlock

6
โดยพื้นฐานแล้วสิ่งที่คุณต้องทำก็คือsudo usermod -aG docker $USERและจะได้ผลในภายหลัง
user2340939

69

sudoฉันมีปัญหานี้และไม่ต้องการที่จะสิ่งที่เลอะใช้ เมื่อตรวจสอบฉันพยายามขอข้อมูลบางอย่าง:

docker info

น่าแปลกใจที่ฉันมีข้อผิดพลาดต่อไปนี้:

ได้รับอนุญาตถูกปฏิเสธขณะพยายามเชื่อมต่อกับซ็อกเก็ต Docker daemon ที่ unix: ///var/run/docker.sock: รับhttp: ///var/run/docker.sock/v1.38/info : dial unix / var /run/docker.sock: เชื่อมต่อ: ปฏิเสธการอนุญาต

ด้วยเหตุผลบางอย่างฉันไม่มีสิทธิ์เพียงพอคำสั่งต่อไปนี้ช่วยแก้ปัญหาของฉัน:

sudo chown $USER /var/run/docker.sock

เอทโวล่า!


แล้วหลังจากรีสตาร์ท Docker อีกครั้งล่ะ? เราต้องทำเช่นนี้อีกครั้ง?
Light.G

ไม่ควรใช้งานได้เมื่อคุณรีสตาร์ท Docker แต่ฉันไม่แน่ใจว่าจะเกิดอะไรขึ้นถ้าคุณรีสตาร์ทเครื่อง
madjaoue

ตามค่าเริ่มต้นนักเทียบท่าจะยึดไว้docker.sockกับกลุ่มที่ไม่ใช่รูทdockerเป็นค่าเริ่มต้น แต่เราสามารถเปลี่ยนแปลงได้โดยใช้-Gแฟล็กในระหว่างที่ Docker daemon เริ่มต้น ในกรณีของฉันฉันเพิ่มกลุ่มสำหรับ$USERNAMEหมายถึงเพิ่มกลุ่มนักเทียบท่าแล้วรีบูตเครื่องของฉัน (ubuntu 16.04, PC) มันทำงานได้ดี และสิ่งนี้แนะนำในเอกสารของนักเทียบท่า
Light.G

3
ใช้ได้ผลกับฉันด้วย :)
Kamil J.

ต้องทำสิ่งนี้หลังจากรีบูตแต่ละครั้ง :(
อดัม

27

ดูเหมือนว่าปัญหาของคุณถูกสร้างขึ้นโดยจุดบกพร่องของ Docker เก่าโดยที่ไฟล์ซ็อกเก็ตไม่ได้ถูกสร้างขึ้นใหม่หลังจากที่ Docker ขัดข้อง หากเป็นปัญหาการเปลี่ยนชื่อไฟล์ซ็อกเก็ตควรอนุญาตให้สร้างใหม่ได้:

$ sudo service docker stop
$ sudo mv /var/lib/docker /var/lib/docker.bak
$ sudo service docker start

เนื่องจากข้อบกพร่องนี้ได้รับการแก้ไขแล้วคนส่วนใหญ่ที่ได้รับข้อผิดพลาดCouldn't connect to Docker daemonอาจได้รับข้อผิดพลาดเนื่องจากไม่ได้อยู่ในdockerกลุ่มและไม่มีสิทธิ์อ่านไฟล์นั้น การใช้งานsudo docker ...จะช่วยแก้ปัญหานั้นได้ แต่ไม่ใช่วิธีแก้ปัญหาที่ดี

นักเทียบท่าสามารถรันในฐานะผู้ใช้ที่ไม่ใช่รูท (ไม่มีsudo) ที่มีสิทธิ์กลุ่มที่เหมาะสม ลินุกซ์โพสต์ติดตั้งเอกสารมีรายละเอียด เวอร์ชันสั้น:

$ sudo groupadd docker
$ sudo usermod -aG docker $USER
# Log out and log back in again to apply the groups
$ groups  # docker should be in the list of groups for your user
$ docker run hello-world  # Works without sudo

นี้จะช่วยให้ผู้ใช้ในdockerกลุ่มที่จะทำงานdockerและคำสั่งโดยไม่ต้องdocker-compose sudoนักเทียบท่าเองเรียกใช้รูททำให้สามารถโจมตีได้บ้างดังนั้นคุณยังคงต้องระมัดระวังกับคอนเทนเนอร์ที่คุณเรียกใช้ โปรดดูเอกสารประกอบความปลอดภัยของ Dockerสำหรับรายละเอียดเพิ่มเติม


คำถามนี้เฉพาะสำหรับการติดตั้ง Linux และการแก้ไขเกี่ยวข้องกับการเปลี่ยนแปลงบนระบบโฮสต์ Linux เพื่อแก้ไข คุณจะได้รับข้อมูลที่ดีขึ้นหากคุณโพสต์คำถามที่คล้ายกันซึ่งมีรายละเอียดเหมือนกัน แต่สำหรับ Windows เพื่อแก้ปัญหาด้วยตัวคุณเองขอแนะนำให้อ่านเอกสารDocker for Windows
jwhitlock

10

ฉันมีปัญหาเดียวกัน หลังจากจดบันทึกและวิเคราะห์ผลการแก้ไขข้อบกพร่องบางอย่างในที่สุดฉันก็แก้ไขข้อผิดพลาดเดียวกันได้ เริ่มบริการก่อน

service docker start

อย่าลืมรวมผู้ใช้ของคุณไว้ในกลุ่มนักเทียบท่า


ฉันใช้งานในฐานะรูทเมื่อพบข้อผิดพลาดนี้ ดูเหมือนsudoจะซ่อมให้คนอื่น -_- ดีใจที่พบว่ามันเป็นแบบนี้จริงๆที่ฉันลืมทำ ง่ายมาก!
จะ

8

คุณควรเพิ่มผู้ใช้ของคุณในกลุ่ม "นักเทียบท่า" ด้วยสิ่งต่อไปนี้

sudo usermod -aG นักเทียบท่า $ {USER}


5

ฉันได้รับข้อผิดพลาดนี้เมื่อมีไฟล์ในDockerfileไดเร็กทอรีที่ผู้ใช้ปัจจุบันไม่สามารถเข้าถึงได้ dockerดังนั้นจึงไม่สามารถอัปโหลดบริบทแบบเต็มไปยัง daemon และนำข้อความ " ไม่สามารถเชื่อมต่อกับ Docker daemon ที่ http + docker: // localunixsocket "


2
ขอบคุณ! สิ่งนี้แก้ไขได้สำหรับฉัน ง่ายต่อการตรวจสอบเนื่องจากคำสั่งนักเทียบท่าทั้งหมดใช้งานได้ แต่นักเทียบท่าเขียนไม่ได้ นอกจากนี้นักเทียบท่าเขียนยังทำงานในไดเร็กทอรีอื่น ข้อความแสดงข้อผิดพลาดที่ทำให้เข้าใจผิดมาก BTW
Csongor Fagyal

1
นี่ควรจะสูงขึ้นจริงๆ
Arlen Anderson

1
ขอบคุณ! ทำงานให้ฉัน การใช้docker build .จะทำให้เกิดปัญหาการอนุญาตใด ๆ
คน

สิ่งเดียวที่ใช้งานได้ - เหตุใดข้อความแสดงข้อผิดพลาดของ Docker จึงไม่ดี ขอบคุณ!
coderMe

4

วิธีหนึ่งในการแก้ไขปัญหานี้คือการเพิ่มผู้ใช้ของคุณในdockerกลุ่มก่อนโดยเรียกใช้สิ่งต่อไปนี้

sudo usermod -aG docker $USER

สิ่งสำคัญ: อย่าลืมออกจากระบบของคุณ (ไม่ใช่เฉพาะเครื่องปลายทางของคุณ) และกลับเข้ามาใหม่เพื่อให้สิ่งนี้มีผล!


sudo usermod -aG docker $ {USER} เราควรออกจากระบบและเข้าสู่ระบบเพื่อใช้การเปลี่ยนแปลง: su - $ {USER}
user3785966

3

จากเอาต์พุตของ "ps aux | grep docker" ดูเหมือนว่า Docker daemon จะไม่ทำงาน ลองใช้วิธีการด้านล่างเพื่อดูว่ามีอะไรผิดปกติและเหตุใดนักเทียบท่าจึงไม่เริ่มทำงาน

  1. ตรวจสอบบันทึกนักเทียบท่า

$ sudo tail -f /var/log/upstart/docker.log

  1. ลองเริ่มนักเทียบท่าในโหมดดีบัก

$ sudo นักเทียบท่า -d -D


3

sudoเพียงแค่ลองกับ ดูเหมือนว่าปัญหาการอนุญาต!

sudo docker-compose -f docker-compose-deps.yml up -d

มันได้ผลสำหรับฉัน


2

ในกรณีของฉันบริการนักเทียบท่าของคุณอาจหยุดทำงาน

คำสั่งเพื่อเริ่มบริการนักเทียบท่า:

$ sudo systemctl start docker

คำสั่งเพื่อตรวจสอบว่าเริ่มต้นหรือไม่:

$ sudo docker run hello-world


2

อีกสาเหตุหนึ่งที่ทำให้ข้อผิดพลาดนี้ปรากฏขึ้น: สำหรับฉันมันเป็นนิยามเส้นทางรูปภาพที่ผิดรูปแบบในdocker-compose.yml:

  service:
    image: ${CONTAINER_REGISTRY_BASE}/my-service
   ...

ดูเป็นเรื่องแรก แต่ฉันได้CONTAINER_REGISTRY_BASE=eu.gcr.io/my-project/ตั้งค่า env แล้ว เห็นได้ชัดว่า//ในเส้นทางรูปภาพทำให้เกิดข้อผิดพลาดนี้

docker-compose: v.1.21.2
docker: 18.03.1-ce

1

ฉันใช้ Ubuntu 16.04 และพบปัญหานี้เช่นกันเมื่อฉันใช้นักเทียบท่าเขียน ฉันแก้ไขโดยเรียกใช้คำสั่งนี้

$ sudo systemctl start docker
$ sudo docker-compose build

1

มีความเป็นไปได้เล็กน้อยที่คุณจะลบเครื่องเริ่มต้นหรือไม่? แต่ก่อนอื่นให้ตรวจสอบว่ามีไฟล์ทั้งหมดหรือไม่ (OSX คล้ายกับระบบอื่น ๆ )

brew install docker docker-compose docker-machine xhyve docker-machine-driver-xhyve
brew link docker docker-compose docker-machine xhyve docker-machine-driver-xhyve

sudo chown root:wheel /usr/local/opt/docker-machine-driver-xhyve/bin/docker-machine-driver-xhyve
sudo chmod u+s /usr/local/opt/docker-machine-driver-xhyve/bin/docker-machine-driver-xhyve

ติดตั้ง Docker App ด้วยเพราะดูแลรักษาคอนเทนเนอร์ได้ง่ายกว่ามาก:

brew cask reinstall docker

ans เริ่มแอป Docker จาก Finder (รอจนกว่าบริการจะเริ่มสมบูรณ์)

จากนั้นตรวจสอบการติดตั้งด้วย:

docker-machine ls

หากไม่มีเครื่องอยู่ในรายการให้สร้างขึ้นมาใหม่และเริ่มต้น:

docker-machine create default
docker-machine start default

หลังจากนี้สร้างเขียนและคำสั่งอื่น ๆ ทั้งหมดควรทำงานได้อย่างถูกต้อง


1

ในกรณีของฉันมันเป็นเพราะการอนุญาต ubuntu

  1. รายการ

ตรวจสอบการอนุญาตโดย

docker info 

หากพวกเขาพิมพ์สิทธิ์ปัญหาให้ ป้อนคำอธิบายภาพที่นี่ ใช้

sudo chmod -R 777 /var/run/docker.sock

0

สำหรับผมการแก้ไขคือการติดตั้งเวอร์ชันใหม่ (1.24) ของdocker-composeใช้บทความนี้

เวอร์ชันก่อนหน้า (1.17) ได้รับการติดตั้งจากubuntuที่เก็บเริ่มต้นของ แต่หลังจากติดตั้งเวอร์ชันที่ใหม่กว่าฉันสามารถเปิดคอนเทนเนอร์ได้ หวังว่ามันจะช่วยใครสักคน


0

ฉันคิดว่าเป็นเพราะสิทธิ์ในการเข้าถึงคุณแค่ต้องเขียน

sudo docker-compose-deps.yml up

-1

ในกรณีของฉันมีข้อผิดพลาดเดียวกันเมื่อฉันพยายามdocker-compose build และวิธีแก้ปัญหาของฉันก็แค่เพิ่มsudo

sudo docker-compose build

-3

ฉันพบสิ่งนี้และดูเหมือนว่าจะแก้ไขปัญหาของฉันได้

GitHub Fix Docker Daemon Crash

ฉันเปลี่ยนเนื้อหาของไฟล์ docker-compose-deps.yml ตามที่เห็นในลิงค์ docker-compose -f docker-compose-deps.yml up -dแล้วผมก็วิ่ง จากนั้นฉันก็เปลี่ยนกลับและใช้งานได้ด้วยเหตุผลบางประการ ฉันไม่ต้องทำตามขั้นตอนต่อไปในลิงก์ที่ให้มา แต่สองขั้นตอนแรกแก้ปัญหาให้ฉันได้


2
ubuntu 16.04: เพิ่ม sudo: sudo
docker

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