ไม่สามารถเชื่อมต่อกับนักเทียบท่าจากนักแต่งเพลง


163

ฉันติดตั้ง docker-machine 0.1.0 และ docker-compose 1.1.0 บน Mac OS 10.8.5
นักเทียบท่าเครื่องทำงานได้ตามปกติและสามารถเชื่อมต่อด้วย ssh-docker-machine

$ docker-machine ls
NAME   ACTIVE   DRIVER       STATE     URL                         SWARM
dev    *        virtualbox   Running   tcp://192.168.99.100:2376   

อย่างไรก็ตามไม่สามารถเชื่อมต่อจากนักแต่งเพลงได้

$ docker-compose up

ไม่สามารถเชื่อมต่อกับ Docker daemon ได้ที่ http + unix: //var/run/docker.sock - กำลังทำงานอยู่หรือไม่

หากอยู่ในตำแหน่งที่ไม่ได้มาตรฐานให้ระบุ URL ด้วยตัวแปรสภาพแวดล้อม DOCKER_HOST

My Dockerfile และ docker-compose.yml อยู่ที่นี่

Dockerfile

FROM centos:centos7
DOCKER_HOST tcp://192.168.99.100:2376

นักเทียบท่า-compose.yml

web:
  build: .

ทำไมถึงไม่สามารถเชื่อมต่อได้ ความคิดใด ๆ


49
ไม่docker-machineทำงานเป็นราก? ฉันเพิ่งมาที่นี่พร้อมกับปัญหาเดียวกันบน Ubuntu และมันเป็นสิทธิ์ของซ็อกเก็ต - sudoทำเคล็ดลับ
SLD

7
สำหรับผู้ที่อยู่ในลินุกซ์, คุณอาจเพียงต้องการที่จะเพิ่มให้กับกลุ่มนักเทียบท่า
Batandwa

5
เพิ่งรัน: sudo docker-compose
Girish Gupta

ฉันมีปัญหาเดียวกัน คุณต้องรีสตาร์ทนักเทียบท่า sudo service docker restartหรือsudo service docker startฉันแก้ไขมันด้วยสิ่งนี้
OM Bharatiya

สำหรับผู้ใช้อูบุนตูคุณควรใช้ sudo และคุณไม่ควรเพิ่มผู้ใช้ในกลุ่มนักเทียบท่า ดูความคิดเห็นในคำตอบที่ได้รับการยอมรับ: askubuntu.com/questions/477551/…
kas

คำตอบ:


89

เครื่อง Docker กำลังทำงาน แต่คุณต้องส่งออกสภาพแวดล้อมบางอย่างเพื่อเชื่อมต่อกับเครื่อง Docker โดยค่าเริ่มต้นdockerไคลเอนต์ CLI พยายามสื่อสารกับ daemon โดยใช้http+unix://var/run/docker.sock(ดังแสดงในข้อความแสดงข้อผิดพลาด)

ส่งออกตัวแปรสภาพแวดล้อมที่ถูกต้องโดยใช้eval $(docker-machine env dev)แล้วลองอีกครั้ง นอกจากนี้คุณยังสามารถเรียกใช้เพียงdocker-machine env devเพื่อดูตัวแปรสภาพแวดล้อมที่จะส่งออก โปรดสังเกตว่าหนึ่งในนั้นคือDOCKER_HOSTเช่นเดียวกับข้อความแสดงข้อผิดพลาดที่แนะนำให้คุณอาจต้องตั้งค่า


2
คุณสามารถใส่คำสั่งนั้น ( eval "$(docker-machine env default)") ลงใน bin / postactivate เพื่อให้แน่ใจว่าเป็นข้อมูลล่าสุด
Dannid

1
ฉันจะหาไฟล์ bin / postactivate ได้ที่ไหน
Lukas Schulze

หรือคุณลืมติดตั้ง$ eval $(docker-machine env dev) Command 'docker-machine' not found, but can be installed with: sudo snap install docker
R OMS

226

ทางออกที่ง่ายสำหรับฉัน: sudo docker-compose up


อัพเดท 2016-3-14: ณ จุดหนึ่งในกระบวนการติดตั้งนักเทียบท่า (หรือนักเทียบท่าเขียน?) มีคำแนะนำและตัวอย่างเพื่อเพิ่มชื่อผู้ใช้ของคุณไปยังกลุ่ม "นักเทียบท่า" สิ่งนี้อนุญาตให้คุณหลีกเลี่ยงการต้องการ "sudo" ก่อนคำสั่ง docker ทั้งหมดเช่น:

~ > docker run -it ubuntu /bin/bash
root@665d1ea76b8d:/# date
Mon Mar 14 23:43:36 UTC 2016
root@665d1ea76b8d:/# exit
exit
~ > 

ดูอย่างละเอียดที่เอาต์พุตของคำสั่งการติดตั้ง (ทั้งตัวเชื่อมต่อและตัวติดตั้งที่สองสำหรับตัวเรียงประกอบ) และคุณจะพบขั้นตอนที่จำเป็น มันเป็นเอกสารที่นี่: https://subosito.com/posts/docker-tips/

Sudo? No!

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

คุณสามารถสร้างกลุ่มที่เรียกว่านักเทียบท่าจากนั้นเพิ่มผู้ใช้ที่ต้องการในกลุ่มนั้น หลังจากรีสตาร์ทบริการนักเทียบท่าผู้ใช้จะไม่จำเป็นต้องพิมพ์ sudo ทุกครั้งที่ดำเนินการนักเทียบท่า มันมีลักษณะอย่างไรกับคำสั่งเชลล์? ในฐานะที่เป็นรากคุณไปที่นี่:

> sudo groupadd docker
> sudo gpasswd -a username docker
> sudo service docker restart 

ทำ!

อัพเดท 2017-3-9

คำแนะนำในการติดตั้งนักเทียบท่าได้รับการอัปเดตที่นี่แล้ว

ขั้นตอนหลังการติดตั้งสำหรับ Linux

ส่วนนี้มีขั้นตอนเพิ่มเติมสำหรับการกำหนดค่าโฮสต์ Linux ให้ทำงานได้ดีขึ้นกับ Docker

จัดการ Docker ในฐานะผู้ใช้ที่ไม่ใช่รูท

นักเทียบท่า daemon ผูกกับซ็อกเก็ต Unix แทนพอร์ต TCP โดยค่าเริ่มต้นแล้วซ็อกเก็ต Unix จะเป็นเจ้าของโดยผู้ใช้รูทและผู้ใช้รายอื่นสามารถเข้าถึงได้โดยใช้ sudo นักเทียบท่า daemon จะทำงานในฐานะผู้ใช้รูทเสมอ

หากคุณไม่ต้องการใช้ sudo เมื่อคุณใช้คำสั่งนักเทียบท่าให้สร้างกลุ่ม Unix ชื่อนักเทียบท่าและเพิ่มผู้ใช้ เมื่อนักเทียบท่า daemon เริ่มต้นมันทำให้เจ้าของซ็อกเก็ต Unix อ่าน / เขียนได้โดยกลุ่มนักเทียบท่า

วิธีสร้างกลุ่มนักเทียบท่าและเพิ่มผู้ใช้ของคุณ:

# 1. Create the docker group.
$ sudo groupadd docker

# 2. Add your user to the docker group.
$ sudo usermod -aG docker $USER

# 3. Log out and log back in so that your group membership is re-evaluated.

# 4. Verify that you can run docker commands without sudo.
$ docker run hello-world

คำสั่งนี้ดาวน์โหลดอิมเมจทดสอบและรันในคอนเทนเนอร์ เมื่อคอนเทนเนอร์ทำงานจะพิมพ์ข้อความแจ้งข้อมูลและออก


1
ในทำนองเดียวกันด้วยเหตุผลบางอย่าง sudo เป็นวิธีเดียวที่จะทำให้มันทำงาน: O: O: O
Jamie Hutber

12
แทนที่จะออกจากระบบ ... คุณสามารถใช้คำสั่ง:newgrp docker
Thiago Falcao

Ahh คำตอบโดยละเอียดพร้อมคำถามย่อย :-)
Sukumaar

1
Re: "ทางออกที่ง่ายสำหรับฉัน: sudo docker-compose up" เมื่อฉันลองสิ่งนั้นฉันจะได้รับ:sudo: docker-compose: command not found
mblakesley

38

หากคุณเริ่มนักเทียบท่าโดยใช้sudoคุณควรรันนักเทียบท่าเขียนด้วยsudo Like:sudo docker-compose up


มันทำงานสำหรับฉันเมื่อฉันวิ่งแทนsudo docker-compose build docker-compose build
anms_pro

26

โดยค่าเริ่มต้น docker daemon จะทำงานในฐานะผู้ใช้รูทเสมอดังนั้นคุณต้องผนวกsudoคำสั่ง Docker ของคุณ

หากคุณไม่ต้องการใช้ sudo เมื่อคุณใช้คำสั่งนักเทียบท่าให้สร้างกลุ่ม Unix ชื่อนักเทียบท่าและเพิ่มผู้ใช้ เมื่อนักเทียบท่า daemon เริ่มต้นมันทำให้เจ้าของซ็อกเก็ต Unix อ่าน / เขียนได้โดยกลุ่มนักเทียบท่า

วิธีสร้างกลุ่มนักเทียบท่าและเพิ่มผู้ใช้ของคุณ:

  1. สร้างกลุ่มนักเทียบท่า

    $ sudo groupadd docker

  2. เพิ่มผู้ใช้ของคุณไปยังกลุ่มนักเทียบท่า

    $ sudo usermod -aG docker $USER

  3. ออกจากระบบและกลับเข้าสู่ระบบเพื่อประเมินความเป็นสมาชิกกลุ่มของคุณอีกครั้ง

  4. ตรวจสอบว่าคุณสามารถเทียบท่าคำสั่งโดยไม่ต้อง sudo

    $ docker run hello-world

คำสั่งนี้ดาวน์โหลดอิมเมจทดสอบและรันในคอนเทนเนอร์ เมื่อคอนเทนเนอร์ทำงานจะพิมพ์ข้อความแจ้งข้อมูลและออก

ตามขั้นตอนที่ระบุไว้ข้างต้นมาจากเอกสารเทียบท่าอย่างเป็นทางการ


เราจะทำสิ่งนี้บน Docker ที่ติดตั้ง windows ได้อย่างไร
Jeff Cook

นอกจากนั้นสิ่งที่ฉันทำเพื่อแก้ไข docker-compose คือการตั้งค่าให้ผู้ใช้ดำเนินการdocker-composeในฐานะเจ้าของ/usr/local/bin/docker-composeและจากนั้นเริ่มบริการใหม่
Sam

groupสมาชิกสามารถรีเฟรชด้วยsu - $USERเพื่อบันทึกการล็อกออฟ & บน
Stuart Cardall

19

เมื่อคุณได้รับข้อผิดพลาด :

ข้อผิดพลาด: ไม่สามารถเชื่อมต่อกับ Docker daemon ได้ที่ http + docker: // localhost - ทำงานอยู่หรือไม่

โซลูชั่นจะเป็น:

  1. ก่อนอื่นให้ลองตรวจสอบDocker Serviceว่าเปิดใช้งานและทำงานตามที่คาดไว้ในเครื่องรีโมต / โลคัลของคุณ:sudo service docker status

    ถ้าไม่ทำงานsudo service docker start หรือsudo systemctl start docker(ขึ้นอยู่กับ linux บางรุ่นให้ดูที่คำแนะนำในการเริ่มต้น Docker )

  2. ประการที่สองเริ่มนักเทียบท่าเป็น sudo sudo docker-compose up


16

sudo systemctl start docker - เพื่อเริ่มบริการ Docker

sudo docker-compose up หลังจากนั้น.

ฉันมี Fedora 26 และพยายามแก้ไขปัญหาเดียวกันนี้ในที่สุดฉันก็เข้าสู่Docker Compose บนหน้า Fedora Developersจากนั้นต่อจากDocker บนหน้า Fedora Developersซึ่งช่วยฉัน

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

ในหน้านักพัฒนาของ Fedoraมีคำแนะนำวิธีการใช้งาน Docker เพื่อเริ่มต้นกับระบบ:

sudo systemctl enable docker


แทนที่systemctlด้วยlaunchctlหากคุณใช้งานบน mac
Rohit Swami

6

หากคุณใช้งานบน Linux คุณอาจไม่ได้docker-machineติดตั้งเนื่องจากจะติดตั้งตามค่าเริ่มต้นในคอมพิวเตอร์ Windows และ Mac เท่านั้น

ถ้าเป็นเช่นนั้นคุณจะต้องไปที่: https://docs.docker.com/machine/install-machine/เพื่อค้นหาคำแนะนำเกี่ยวกับวิธีการติดตั้งบน Linux เวอร์ชันของคุณ

หลังจากติดตั้งแล้วให้ลองเรียกใช้อีกครั้งdocker-compose upก่อนลองสิ่งใดก็ตามที่ระบุไว้ข้างต้น

หวังว่านี่จะช่วยใครซักคน สิ่งนี้ใช้ได้กับการติดตั้ง devilbox ของฉันใน Fedora 25


5

นอกเหนือจากการเพิ่มผู้ใช้ไปยังกลุ่มนักเทียบท่าเพื่อหลีกเลี่ยงการพิมพ์sudoซ้ำคุณยังสามารถสร้างนามแฝงสำหรับdockerคำสั่งดังนี้:

alias docker-compose="sudo docker-compose"
alias docker="sudo docker"

4

หากคุณใช้นักเทียบท่าเครื่องคุณต้องเปิดใช้งานสภาพแวดล้อมโดยใช้ ตัวแปรenv ในกรณีที่คุณไม่ได้ใช้นักเทียบท่าจากนั้นเรียกใช้คำสั่งด้วยsudo


3

ใครตรวจสอบบันทึก

ในกรณีข้อความแสดงข้อผิดพลาดของฉัน/var/log/upstart/docker.logคือ:

Listening for HTTP on unix (/var/run/docker.sock) 
[graphdriver] using prior storage driver "aufs" 
Running modprobe bridge nf_nat failed with message: , error: exit status 1 
Error starting daemon: Error initializing network controller: Error creating default "bridge" network: can't find an address range for interface "docker0" 

คุ้มค่าที่จะกล่าวถึงฉันได้เปิด VPN ดังนั้น: $ sudo service openvpn stop $ sudo service docker restart $ docker-compose up|start $ sudo service openvpn start เป็นวิธีแก้ปัญหา


3

คำตอบจาก @srfrnk ใช้ได้สำหรับฉัน

ในสถานการณ์ของฉันฉันมีไฟล์ docker-compose.yml ถัดไป:

  nginx:
    build:
      context: ./
      dockerfile: "./docker/nginx.staging/Dockerfile"
    depends_on:
      - scripts
    environment:
      NGINX_SERVER_NAME: "some.host"
      NGINX_STATIC_CONTENT_OPEN_FILE_CACHE: "off"
      NGINX_ERROR_LOG_LEVEL: debug
      NGINX_BACKEND_HOST: scripts
      NGINX_SERVER_ROOT: /var/www/html
    volumes:
      - ./docker-runtime/drupal/files:/var/www/html/sites/default/files:rw
    ports:
      - 80:80

./docker-runtimeเจ้าของและกลุ่ม - คือrootเมื่อเจ้าของไฟล์คนอื่น - ผู้ใช้ของฉัน เมื่อฉันพยายามที่จะสร้างnginx

Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?

ผมเพิ่ม./docker-runtimeไป.dockerignoreและจะมีการแก้ปัญหาของฉัน


3

ในขณะที่ทำงานdocker-compose pull- ฉันได้รับข้อผิดพลาดด้านล่าง

ข้อผิดพลาด: ไม่สามารถเชื่อมต่อกับ Docker daemon ได้ที่ http + docker: // localhost

มันทำงานอยู่เหรอ?

สารละลาย -

sudo service docker start 

ปัญหาได้รับการแก้ไข


2

ฉันมีอาการเหมือนกัน

แตกต่างกันเพียงว่ามันเกิดขึ้นเฉพาะในระหว่างการdocker-compose build docker psทำงาน ที่เกิดขึ้นกับรุ่นเช่นเดียวกับ2.x 3.xเริ่มต้นใหม่dockerบริการแล้วเครื่อง ... แม้ติดตั้งใหม่+dockerdocker-compose

พยายามทุกอย่าง แต่ไม่มีอะไรช่วย

ในที่สุดผมก็พยายามสร้าง Dockerfile "ด้วยตนเอง" docker buildโดยใช้

เห็นได้ชัดว่าฉันมีปัญหาการอนุญาตในไฟล์ / โฟลเดอร์ภายในDockerบริบท มันพยายามอ่านบริบทเมื่อเริ่มต้นบิลด์และล้มเหลวด้วยข้อความแสดงข้อผิดพลาดที่เหมาะสม อย่างไรก็ตามข้อความแสดงข้อผิดพลาดนี้ไม่ได้เผยแพร่ที่จะdocker-composeแสดงเฉพาะCouldn't connect to Docker daemon at http+unix://var/run/docker.sock - is it running?

พบว่าวิธีการแก้ปัญหาเป็นเพียงการเพิ่มไฟล์ / โฟลเดอร์ไปยัง.dockerignoreไฟล์เพราะมันไม่จำเป็นสำหรับการสร้าง อาจมีวิธีแก้ไขปัญหาอื่นอีกchownหรือchmodไม่

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


ฉันมีปัญหาเดียวกัน: การอนุญาตไฟล์ในโวลุ่มที่เมานต์ ในกรณีของฉันฉันมีใบรับรอง SSL ที่เป็นเจ้าของโดย root ที่ใส่ไว้ในโวลุ่ม Docker chown/ chmodแก้ไขมัน ข้อความแสดงข้อผิดพลาดแย่มาก แต่พวกเขากำลังทำงานอยู่ ดู github.com/docker/compose/issues/5318
bcattle

2

$ sudo นักเทียบท่าเขียนขึ้น

ฉันทำตามขั้นตอนตามคำตอบข้างต้นเพื่อเพิ่ม $ USER เข้ากลุ่มนักเทียบท่า ฉันไม่ต้องการที่จะเพิ่มนักเทียบท่ากลุ่มใหม่เพราะในการติดตั้งนักเทียบท่าของฉันกลุ่มนักตั้งชื่อที่สร้างขึ้นโดยอัตโนมัติ

Docker CE ได้รับการติดตั้งและใช้งาน กลุ่มนักเทียบท่าถูกสร้างขึ้น แต่ไม่มีผู้ใช้เพิ่มเข้าไป คุณต้องใช้ sudo เพื่อเรียกใช้คำสั่ง Docker ไปที่ Linux postinstall เพื่ออนุญาตให้ผู้ใช้ที่ไม่มีสิทธิใช้งานรันคำสั่ง Docker และสำหรับขั้นตอนการกำหนดค่าเพิ่มเติมอื่น ๆ

แต่การใช้นักเทียบท่าแต่งก็ไม่ได้ผล มันให้ข้อผิดพลาดก่อนหน้านี้เหมือนกัน ดังนั้นในกรณีของฉัน (Ubuntu 18.10) sudo docker-compose ที่แก้ไขปัญหา

ps: @Tiw ขอบคุณสำหรับคำแนะนำ


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

2

ฉันรู้ว่ามันโง่ แต่ในกรณีของฉันฉันแค่ลองด้วยsudoและมันก็ทำงานได้เหมือนมีเสน่ห์

ในกรณีของคุณเพียงลอง: $ sudo docker-compose up



1

ฉันได้แก้ไขปัญหาโดยใช้ขั้นตอนต่อไปนี้

$ sudo service docker status
$ sudo service docker start
$ sudo docker-compose up

ตอนนี้นักเทียบท่าแต่งกำลังทำงาน


0

สำหรับฉันฉันเริ่มอัพเกรด Docker และยกเลิกกลางคัน ฉันไม่ได้สังเกตว่า Docker ไม่ทำงาน (ถ้าเป็นเช่นนั้นจะมีไอคอนที่แถบนำทางด้านบนของ Macbook ของฉันโดยใช้แบตเตอรี่ที่เหลืออยู่เวลา ฯลฯ ) เมื่อฉันเปิดตัวและอัปเกรดเสร็จแล้วก็docker-compose upทำงานอีกครั้ง!


0

การตั้งค่าของฉันมีสองกรณีสำหรับข้อผิดพลาดนี้:

  • __pycache__ ไฟล์ที่สร้างโดยผู้ใช้รูทหลังจากที่ฉันรันการทดสอบการรวมภายในคอนเทนเนอร์ไม่สามารถเข้าถึงได้สำหรับนักเทียบท่า (บอกปัญหาเดิมให้คุณ) และนักเขียนที่เรียบเรียง (บอกคุณเกี่ยวกับโฮสต์นักเทียบท่าอย่างคลุมเครือ);
  • microk8s บล็อกพอร์ตของฉันจนกว่าฉันจะหยุดมัน

0

ลองเรียกใช้dockerdหรือsudo dockerdถ้าจำเป็นก่อนเพื่อเริ่มดีมอน หากคุณเริ่มต้นdockerdด้วยsudoคุณอาจต้องการที่จะทำงานdocker-compose upด้วยsudoนอกจากนี้ยังมี ไม่งั้นมันก็โอเค

วิธีแก้ปัญหาการทำงานจากhttps://github.com/docker/compose/issues/4181


0

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

ทางออกทางออก

จากนั้น ssh เข้าสู่เซิร์ฟเวอร์อีกครั้ง


0

ต่อไปนี้ใช้ได้กับฉันฉันไม่แน่ใจว่าส่วนใดที่หลอก:

julian:project$ sudo service docker status
julian:varys$ sudo service docker status                                                                                                                                                                                
● docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2020-07-15 01:21:16 UTC; 24min ago
     Docs: https://docs.docker.com
 Main PID: 6762 (dockerd)
    Tasks: 25
   CGroup: /system.slice/docker.service
           └─6762 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

julian:project$ export DOCKER_HOST=unix:///run/containerd/containerd.sock

julian:project$ sudo groupadd docker
groupadd: group 'docker' already exists
julian:project$ sudo gpasswd -a $USER docker
Adding user ubuntu to group docker
julian:project$ newgrp docker

julian:project$ ls -ln /var/run/ | grep docker
drwx------  5   0   0  120 Jul 15 01:10 docker
-rw-r--r--  1   0   0    4 Jul 15 01:10 docker.pid
srw-rw----  1   0 999    0 Jul 15 01:10 docker.sock

julian:project$ sudo rm /var/run/docker.sock                                                                                                                                                                                            
julian:project$ sudo rm /var/run/docker.pid

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