ฉันกำลังพยายามเชื่อมต่อกับ daemon ที่เปิดใช้งาน TLS โดยไม่มี TLS หรือไม่


221

ฉันพยายามเรียนรู้เกี่ยวกับนักเทียบท่าแต่ฉันได้รับข้อความแสดงข้อผิดพลาดที่เป็นความลับ

อาจเป็นตัวอย่างที่ง่ายที่สุดของเรื่องนี้คือพยายามพิมพ์เวอร์ชันของ Docker I ที่ติดตั้ง:

$ sudo docker version
Client version: 1.4.1
Client API version: 1.16
Go version (client): go1.3.3
Git commit (client): 5bc2ff8
OS/Arch (client): darwin/amd64
FATA[0000] Get http:///var/run/docker.sock/v1.16/version:
    dial unix /var/run/docker.sock: no such file or directory.
    Are you trying to connect to a TLS-enabled daemon without TLS?

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

ฉันเพิ่งสังเกตเห็นว่าถ้าฉันไม่ได้ใช้sudoฉันไม่ได้รับข้อผิดพลาด:

$ docker version
Client version: 1.4.1
Client API version: 1.16
Go version (client): go1.3.3
Git commit (client): 5bc2ff8
OS/Arch (client): darwin/amd64
Server version: 1.4.1
Server API version: 1.16
Go version (server): go1.3.3
Git commit (server): 5bc2ff8

แน่นอนว่านี่ไม่ใช่วิธีแก้ปัญหาอย่างที่ฉันอาจจำเป็นต้องใช้sudoที่ไหนสักแห่งบนถนน ...

ฉันเพิ่งพบอีกหน้าว่า " ถ้าคุณใช้ OS Xคุณไม่ควรใช้sudo" ฉันไม่รู้ว่าพวกเขาหมายถึงเฉพาะตัวอย่างนั้นหรือโดยทั่วไป


38
คำถามงี่เง่า แต่คุณเริ่ม daemon นักเทียบท่า?
Usman Ismail

ฉันได้ปฏิบัติตามคู่มือผู้ใช้ดังนั้นใช่ฉันเชื่อว่านักเทียบท่า daemon เริ่มต้นแล้ว ฉันจะตรวจสอบอีกครั้งได้อย่างไร
Shawn

5
จริงๆแล้วคุณพบวิธีแก้ปัญหา ด้วย boot2docker คุณไม่จำเป็นต้องใช้ sudo กับ linux คุณจะต้องใช้ sudo เสมอ นี่เป็นเพราะ boot2docker ใช้คำสั่งเหล่านั้นในกล่องเสมือนซึ่งตั้งค่าให้เข้าถึง daemon ได้อย่างถูกต้อง
Usman Ismail

1
ฉันกำลังดิ้นรนกับปัญหานี้และทำงานโดยไม่ต้องทำงาน sudo สำหรับฉัน
sak

6
คำตอบเกือบทั้งหมดเป็นเฉพาะ OS X (กล่าวถึงboot2docker) แม้ว่า OS X จะไม่ได้กล่าวถึงอย่างชัดเจนในคำถามหรือแท็ก หากใครสนใจคำตอบทั่วไปโปรดดูคำตอบของฉัน
Piotr Dobrogost

คำตอบ:


150

สำหรับฉันแล้วการรัน$(boot2docker shellinit 2> /dev/null)แก้ไขปัญหาได้

สิ่งนี้จะรันเอาต์พุตของboot2docker shellinitคำสั่ง (สามset -x ...บรรทัด) ในเซสชันเทอร์มินัลปัจจุบันของคุณซึ่งทำให้dockerคำสั่งทราบว่าจะค้นหาเครื่องเสมือน boot2docker ได้ที่ไหน

การเพิ่ม$(boot2docker shellinit 2> /dev/null)ที่ด้านล่างของ~/.bash_profileไฟล์ของคุณจะทำให้แน่ใจว่าdockerคำสั่งถูกกำหนดค่าทุกครั้งที่คุณเปิดเทอร์มินัล


boot2docker shellinit ^ /dev/null | sourceสำหรับคนที่ใช้เปลือกปลา:


โปรดทราบว่า2> /dev/null(และเทียบเท่า Fish ^ /dev/null) เป็นตัวเลือก เช่นเดียวกับ @ pablo-fernandez แนะนำสิ่งนี้จะซ่อนWriting ..สาย


ฉันทำสิ่งนี้ไปแล้ว แต่ฉันจะเพิ่มลงใน. bash_profile ความคิดที่ดี
Shawn

แน่นอนช่วยด้วย boot2docker 1.5 แต่เก่ากว่าหนึ่ง boot2docker 1.2 ไม่ได้ทำอย่างถูกต้อง
Max Markov

1
ฉันเพิ่มการเปลี่ยนเส้นทาง stderr ดังนั้นคำสั่ง "Writting ... " จะไม่ปรากฏ: $ (boot2docker shellinit 2> / dev / null)
Pablo Fernandez

3
ขอบคุณที่พูดถึงเปลือกปลา! แก้ไขปัญหาให้ฉัน
cyrillk

1
ดังที่ได้กล่าวไว้ในคำตอบของซัลวาดอร์ดาลีด้านล่างตรวจสอบให้แน่ใจว่าคุณได้รันboot2docker startก่อนที่จะเรียกใช้ shell init ด้วย
Kevin

78

ฉันได้รับข้อผิดพลาดเดียวกันบน MacOS ด้วย sudo และไม่ทำเช่นนั้น

ฉันได้แก้ไขมันด้วย:

boot2docker start
$(boot2docker shellinit)

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

PS2:บางครั้งboot2docker initสามารถทำได้ก่อนเรียกใช้สองคำสั่ง (ขอบคุณ Aaron)


ใช้งานได้ แต่ฉันไม่เข้าใจว่าทำไม $ (boot2docker shellinit) ทำอะไรอยู่
Emile

สิ่งนี้ใช้งานได้ใน Mac OS X แต่ฉันมีคำถามเดียวกันกับ Emile นั่นคือเหตุผลที่ทำไมจึงใช้งานได้
นิสสัน

สิ่งนี้ไม่ได้ผลสำหรับฉันใน Mac OSX 10.10.4 ด้วยเครื่องมือ Docker
b01

ฉันไม่เพียง แต่จะรัน boot2docker shellinit แต่ยังคัดลอกและเรียกใช้คำสั่งที่แสดง เอกสารทางการโดยลิงก์บอกว่าคำสั่งนี้แสดงเฉพาะชุดคำสั่งที่จำเป็นเท่านั้น
Vitaliy Lebedev

ทำงานให้ฉันด้วยเช่นกันบนเครื่อง windows
Noushad

55

ในกรณีของฉัน (Linux Mint 17) ฉันทำสิ่งต่าง ๆ และฉันไม่แน่ใจว่าสิ่งใดที่จำเป็นทั้งหมด

ฉันรวมแพ็คเกจ Ubuntu ที่ขาดหายไป:

$ sudo apt-get install apparmor lxc cgroup-lite

เพิ่มผู้ใช้ในกลุ่มdocker:

$ sudo usermod -aG docker ${USER}

daemon เริ่มต้น (openSUSE ต้องการเพียงสิ่งนี้)

$ sudo docker -d

ขอบคุณ \ ระบุแหล่งที่มา


ขอบคุณUsman Ismailเพราะอาจเป็นเพียงสิ่งสุดท้ายที่ ...

คำถามงี่เง่า แต่คุณเริ่ม daemon นักเทียบท่า? - Usman Ismail 17 ธันวาคม '14 เวลา 15:04 น


ขอบคุณgithub @ MichaelJColeสำหรับวิธีแก้ปัญหาที่ใช้งานได้ดีเพราะฉันไม่ได้ตรวจสอบภูตเมื่อฉันอ่านความคิดเห็นของ Usman

ความคิดเห็น GitHub :

sudo apt-get install apparmor lxc cgroup-lite
sudo apt-get  install docker.io
# If you installed docker.io first, you'll have to start it manually
sudo docker -d
sudo docker run -i -t ubuntu /bin/bash

ขอขอบคุณที่โพสต์ fredjean.netสำหรับสังเกตเห็นแพคเกจที่ขาดหายไปและลืมเกี่ยวกับการเริ่มต้นคำแนะนำการติดตั้ง Ubuntu และ google เกี่ยวกับวิธีการอื่น ๆ

ปรากฎว่า cgroup-lite และแพ็คเกจ lxc ไม่ได้ถูกติดตั้งตามค่าเริ่มต้นบน Linux Mint การติดตั้งทั้งคู่ทำให้ฉันสามารถรัน bash ในอิมเมจพื้นฐานแล้วสร้างและรันอิมเมจของฉัน


ขอบคุณbrettof86แสดงความคิดเห็นเกี่ยวกับ openSUSE


2
ขอบคุณ! ในกรณีของฉัน (มิ้นต์ 17.1) มันเป็น apparmor ที่ขาดหายไป
Alexandre L บอก

2
การเพิ่มตัวเองลงในกลุ่มนักเทียบท่าก็ช่วยฉันsudo adduser $USER dockerได้ เคล็ดลับที่จะทำให้มันมีผลกับเชลล์ปัจจุบันคือcurgroup=$(id -gn) && newgrp docker && newgrp $curgroupดัดแปลงมาจากsuperuser.com/questions/272061/ …
Tero Tilus

1
ฉันเดาว่านี่เป็นคะแนนที่ต่ำกว่ามากเพราะคนใช้ OS X มากกว่า Linux? ฉันใช้ Ubuntu 14.04 และใช้งานได้สำหรับฉัน
icedwater

1
openSUSE และฉันแค่ต้องการเริ่ม daemon
blockloop

ขอโทษที่ฉันไม่รู้เกี่ยวกับเครื่องเทียบท่า แต่ฉันไม่รู้ แต่ถ้าคุณพบกรุณาชี้มันที่นี่ในความคิดเห็นหรือแก้ไขคำตอบ : D
ElMesa

49

ปัญหาที่ขีดเส้นใต้นั้นง่าย - การไม่ได้รับอนุญาตให้ใช้/var/run/docker.sockซ็อกเก็ตโดเมน unix

จากบทตัวเลือกซ็อกเก็ต Daemon ของการอ้างอิงบรรทัดคำสั่ง Docker สำหรับ Docker 1.6.0:

โดยค่าเริ่มต้นซ็อกเก็ตโดเมนยูนิกซ์ (หรือซ็อกเก็ต IPC) ถูกสร้างขึ้นที่ /var/run/docker.sock, ที่กำหนดให้ได้รับอนุญาตรากอย่างใดอย่างหนึ่งหรือเป็นสมาชิกของกลุ่มนักเทียบท่า

ขั้นตอนที่จำเป็นในการให้สิทธิ์แก่ผู้ใช้อธิบายไว้ในคำแนะนำในการติดตั้ง Docker สำหรับ Fedora :

การให้สิทธิ์แก่ผู้ใช้ในการใช้ Docker

บรรทัดคำสั่งนักเทียบท่าที่ติดต่อเครื่องมือกระบวนการภูตนักเทียบท่าผ่านทางไฟล์ซ็อกเก็ต ที่เป็นเจ้าของโดย/var/run/docker.sock root:rootแม้ว่าจะแนะนำให้ใช้คำสั่ง sudo สำหรับนักเทียบท่า แต่หากผู้ใช้ต้องการหลีกเลี่ยงมันผู้ดูแลระบบสามารถสร้างกลุ่มนักเทียบท่าเป็นเจ้าของ /var/run/docker.sockและเพิ่มผู้ใช้ในกลุ่มนี้

$ sudo groupadd docker
$ sudo chown root:docker /var/run/docker.sock
$ sudo usermod -a -G docker $USERNAME

ออกจากระบบและกลับเข้าสู่ระบบเพื่อให้การเปลี่ยนแปลงข้างต้นมีผล โปรดทราบว่าแพ็กเกจ Docker ของ Linux ดิสทริบิวชัน (Ubuntu) มีอยู่แล้ว/var/run/docker.sockในdockerกลุ่มทำให้ขั้นตอนสองขั้นตอนแรกข้างต้นไม่จำเป็น

ในกรณีที่ OS X และboot2dockerสถานการณ์แตกต่างกัน Docker daemon รันภายใน VM ดังนั้นDOCKER_HOSTตัวแปรสภาวะแวดล้อมต้องถูกตั้งค่าเป็น VM นี้เพื่อให้ไคลเอ็นต์ Docker สามารถค้นหา Docker daemon สิ่งนี้ทำได้โดยการรัน$(boot2docker shellinit)ในเชลล์


1
อืมสถานการณ์ของฉันคล้ายกัน แต่แตกต่างกันเล็กน้อย ฉันกำลังใช้งาน Ubuntu 14.04 ดูเหมือนว่าติดตั้งอย่างถูกต้องนักเทียบท่า (ป้อนเพียง "นักเทียบท่า" จะแสดงรายการคำสั่ง) ฉันสร้างกลุ่มนักเทียบท่าและทำให้ผู้ใช้เป็นสมาชิกของกลุ่ม นี่เป็นเพียงระบบในบ้านและฉันแค่เล่นกับนักเทียบท่า อย่างไรก็ตามสิ่งอื่นนอกเหนือจาก "นักเทียบท่า" จะทำให้เกิดข้อผิดพลาด ฉันเชื่อว่ามันเพราะนักเทียบท่าไม่สามารถสร้าง /var/run/docker.sock ในระบบ / var / run ของฉันคือ symlink to / run ซึ่งเป็น root: root และ 755 Perm เพื่อให้นักเทียบท่าไม่สามารถเขียนได้ ไม่แน่ใจว่าโซลูชันของฉันจะเป็นเช่นไร
Steve Cohen

อย่างไรก็ตาม, คำอธิบายนี้มีประโยชน์มาก. Canyou อธิบายเพิ่มเติมเกี่ยวกับสาเหตุที่ "$ (boot2docker shellinit)" ทำงานได้ แต่ธรรมดา "boot2docker shellinit" ไม่ได้? ผมเข้าใจว่าวงเล็บบ่งบอกถึงการดำเนินการใน subshell แต่ผมยังไม่ได้รับสามารถที่จะปริศนาว่าทำไมที่จำเป็นเพื่อให้การทำงานอย่างถูกต้องนักเทียบท่าเมื่อไม่มีคำสั่งอื่น ๆ จำเป็นต้องใช้มัน ....
อเล็กซ์ Edelstein

@AlexEdelstein ความแตกต่างระหว่างboot2docker shellinitและคำสั่งอื่น ๆ คือคำสั่งนี้ไม่ได้ทำการเปลี่ยนแปลงใด ๆ แต่จะสร้างเฉพาะคำสั่ง (พิมพ์) ที่คุณต้องรันด้วยตัวเอง คุณสามารถเรียกใช้boot2docker shellinitก่อนแล้วจึงคัดลอกและเรียกใช้แต่ละคำสั่งจากเอาต์พุต การเรียกใช้คำสั่งทั้งหมดทำได้ง่ายกว่าด้วยการทำงานboot2docker shellinitใน subprocess (ด้วย$()ไวยากรณ์) เพราะวิธีนี้แต่ละบรรทัดของเอาต์พุตจะถูกรันโดยอัตโนมัติเป็นคำสั่งเชลล์ ดูdocs.docker.com/installation/mac/#from-your-command-lineที่แสดงรายละเอียด
Piotr Dobrogost

@SteveCohen คุณอาจต้องการตรวจสอบว่าบริการนักเทียบท่ากำลังทำงานอยู่sudo service docker statusหรือไม่ ใน Ubuntu 14.04 ของฉันไม่ทำงานหลังจากการติดตั้งซึ่งทำให้เกิดข้อผิดพลาด
razz0

1
ขอขอบคุณที่เชื่อมโยงเอกสารจริงเพื่อหาสาเหตุแก้ไขปัญหาของฉัน
RonaldFindling

23

ตรวจสอบให้แน่ใจว่า Docker daemon กำลังทำงาน:

service docker start

นั่นแก้ไขให้ฉัน!


sudo service docker startสำหรับฉัน
Milimetric

systemctl enable docker.serviceและsystemctl start docker.service สำหรับผู้ใช้ linux system.d (ทำตามในกรณีของฉัน)
PRDeving

sudo service docker restartสำหรับฉัน
Frozen Flame

15
  1. นักเทียบท่าเรียกตัวเองว่ารันไทม์แบบพอเพียงสำหรับคอนเทนเนอร์ Linux กล่าวง่ายๆก็คือทำหน้าที่ทั้งเซิร์ฟเวอร์และไคลเอนต์
  2. $ docker versionแบบสอบถามคำสั่งภายในเพื่อปฏิบัติการเทียบท่าและไม่ภูต / บริการทำงาน
  3. $ docker images or $ docker ps or $ docker pull centos คือคำสั่งที่ส่งเคียวรีไปยังนักเทียบท่า daemon / บริการที่กำลังทำงาน
  4. นักเทียบท่าโดยค่าเริ่มต้นรองรับการเชื่อมต่อ TLS กับ daemon / บริการ
  5. เฉพาะในกรณีที่ผู้ใช้ที่คุณเข้าสู่ระบบในฐานะเป็นส่วนหนึ่งของกลุ่มผู้ใช้dockerหรือคุณได้ใช้sudoก่อนคำสั่งเช่น$ sudo docker imagesมันไม่จำเป็นต้องเชื่อมต่อ TLS

เยี่ยมชมเทียบท่าหน้าเอกสารปกป้องซ็อกเก็ตภูตเทียบท่า

เลื่อนไปด้านบนเล็กน้อยเพื่อค้นหาwarning sectionความชัดเจน


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

1
@laffuste คำสั่งของคุณจะลบกลุ่มผู้ใช้เพิ่มเติมของผู้ใช้ เพราะการหายไปของ "-a"
Pawel Barcik

3
@ PawelBarcik ผิดพลาดมากขอบคุณ:sudo usermod -a -G docker {username}
laffuste

1
คำตอบนี้ตอบคำถามอย่างไร อะไรคือสาเหตุของข้อผิดพลาด? จะแก้ไขได้อย่างไร? (ฉันไม่ได้อยู่ใน OS X ดังนั้นจึงไม่มีคำตอบที่มีอยู่)
Piotr Dobrogost

13

คุณจะต้องทำ:

$boot2docker init
$boot2docker start

การตั้งค่าต่อไปนี้แก้ไขปัญหา:

$export DOCKER_HOST=tcp://192.168.59.103:2376
$export DOCKER_CERT_PATH=/Users/{profileName}/.boot2docker/certs/boot2docker-vm
$export DOCKER_TLS_VERIFY=1

1
คำสั่งนี้ยังสามารถใช้เพื่อตั้งค่าตัวแปรสภาพแวดล้อม (แทนที่จะทำด้วยตนเอง):eval "$(boot2docker shellinit)"
พลัง

11

เป็นไปได้ว่าคุณยังไม่ได้รับอนุญาตให้ใช้ไฟล์ มันเกิดขึ้นกับฉันหลังจากที่ฉันเพิ่มตัวเองลงในdockerกลุ่มโดยใช้

sudo gpasswd -a user docker

แต่ยังไม่ออกจากระบบ

ในการแก้ไขปัญหานี้คุณสามารถลงชื่อเข้าใช้อีกครั้งหรือใช้ sg docker "docker <subcommand> ..."ก่อนที่คุณจะออกจากระบบ

ถ้าคุณอยู่ในกลุ่มdocker ใน/etc/groupคุณควรจะสามารถทำงานได้โดยไม่ต้องใช้รหัสผ่านพิมพ์

https://dingyichen.wordpress.com/2015/02/05/docker-dial-unix-varrundocker-sock-no-such-file-or-directory-are-you-trying-to-connect-to-a- TLS-เปิดใช้งานได้โดยไม่ต้องภูต-TLS /


7

บน Ubuntu หลังจากติดตั้งlxc-dockerคุณต้องเพิ่มผู้ใช้ของคุณในกลุ่มผู้ใช้docker :

sudo usermod -a -G docker myusername

นี่เป็นเพราะสิทธิ์ของไฟล์ซ็อกเก็ต:

srw-rw---- 1 root docker 0 Mar 20 07:43 /var/run/docker.sock

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

นี่คือสิ่งที่จะเกิดขึ้น:

➜  ~  id pawel
uid=1000(pawel) gid=1000(pawel) groups=1000(pawel),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),108(lpadmin),124(sambashare),998(docker)
➜  ~  usermod -G docker pawel
➜  ~  id pawel               
uid=1000(pawel) gid=1000(pawel) groups=1000(pawel),998(docker)

6

TLDR : นี่ทำให้กลุ่มพบปะ Python ของฉันผ่านปัญหานี้เมื่อฉันใช้งานคลินิกในการติดตั้งนักเทียบท่าและผู้ใช้ส่วนใหญ่อยู่ใน OS X:

boot2docker init
boot2docker up

เรียกใช้exportคำสั่งที่ส่งออกให้คุณแล้ว

docker info

ควรบอกคุณว่ามันใช้งานได้


บริบท (สิ่งที่นำเราสู่ปัญหา)

ฉันเป็นผู้นำคลินิกในการติดตั้งนักเทียบท่าและผู้เข้าร่วมส่วนใหญ่มี OS X และเราพบปัญหานี้และฉันเอาชนะมันได้ในหลายเครื่อง นี่คือขั้นตอนที่เราปฏิบัติตาม:

อันดับแรกเราติดตั้งโฮมบรูว์ (ใช่ผู้เข้าร่วมบางคนไม่มี):

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

จากนั้นเราได้ถังซึ่งเราใช้ในการติดตั้ง virtualbox และจากนั้นใช้ชงเพื่อติดตั้งนักเทียบท่าและ boot2docker (จำเป็นสำหรับ OS X ทั้งหมด) อย่าใช้ sudo สำหรับชง :

brew install caskroom/cask/brew-cask
brew cask install virtualbox
brew install docker
brew install boot2docker

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

นั่นคือเมื่อเราพบปัญหาผู้ถามที่นี่ได้ ดังต่อไปนี้แก้ไขได้ ฉันเข้าใจว่าinitเป็นข้อตกลงครั้งเดียว แต่คุณอาจต้องเรียกใช้upทุกครั้งที่คุณเริ่มนักเทียบท่า:

boot2docker init
boot2docker up

จากนั้นเมื่อupมีการเรียกใช้มันก็มีหลายexportคำสั่ง คัดลอกวางและเรียกใช้สิ่งเหล่านั้น

ในที่สุดdocker infoควรบอกคุณว่าติดตั้งอย่างถูกต้อง

เพื่อสาธิต

ส่วนที่เหลือของคำสั่งควรสาธิตมัน (บน Ubuntu linux ฉันต้องการ sudo)

docker run hello-world
docker run -it ubuntu bash

จากนั้นคุณควรอยู่บนรูตเชลล์ในคอนเทนเนอร์:

apt-get install nano
exit

กลับไปที่การทุบตีผู้ใช้ดั้งเดิมของคุณ:

docker ps -l

มองหาประมาณ 12 เลขฐานสิบหกบาท (0-9 หรือเอเอฟ) ระบุใต้ "รหัสคอนเทนเนอร์" 456789abcdefเช่น จากนั้นคุณสามารถคอมมิชชันการเปลี่ยนแปลงของคุณและตั้งชื่อเป็นชื่อที่สื่อความหมายเช่นdescriptivename:

docker commit 456789abcdef descriptivename`

5

ทุกสิ่งที่คุณต้องใช้เพื่อเรียกใช้ Docker บน Linux Ubuntu / Mint:

sudo apt-get -y install lxc
sudo gpasswd -a ${USER} docker
newgrp docker
sudo service docker restart

คุณอาจต้องติดตั้งการพึ่งพาเพิ่มเติมสองรายการหากการทำงานด้านบนไม่ทำงาน:

sudo apt-get -y install apparmor cgroup-lite
sudo service docker restart

1
ฉันจะให้ตัวเอง +1 ถ้าเป็นไปได้ - ฉันกำลังมองหาวิธีการแก้ปัญหาและพบวิธีการแก้ปัญหาของตัวเองซึ่งฉันลืม :)
tomrozb

สิ่งนี้ช่วยฉัน ฉันรู้ว่าบริการนักเทียบท่าไม่ได้ทำงานหลังจากการติดตั้งดังนั้นsudo service docker startแก้ไขปัญหาบน Ubuntu 14.04 ของฉัน
razz0

3

ฉันลองวิธีแก้ปัญหาที่นี่และ boot2docker ไม่ทำงาน

โซลูชันของฉัน:ถอนการติดตั้ง boot2docker บน Mac ติดตั้ง Centos 7 VM ใน VirtualBox และทำงานกับ Docker ภายใน VM นั้น


3

สำหรับฉันขั้นตอนต่อไปนี้ทำงาน:

  1. ฉันสังเกตเห็นว่าการทำงานdocker run hello-worldล้มเหลวโดยมีข้อผิดพลาดที่ทำให้ตกใจเหมือนในคำถาม แต่การวิ่งนั้นใช้sudo docker run hello-worldงานได้
  2. ฉันเพิ่มผู้ใช้ปัจจุบันของฉันในdockerกลุ่ม, sudo adduser user docker. จากนั้นคุณต้องรีสตาร์ทเครื่องหรือใช้งานsu - user(ตรวจสอบการใช้groupsคำสั่งหากอยู่ในdockerกลุ่ม)

หลังจากนั้นก็hello-worldเริ่มทำงาน

คำตอบของฉันขึ้นอยู่กับฉันจะใช้นักเทียบท่าได้อย่างไรโดยไม่ใช้ sudo ซึ่งอธิบายสิ่งที่ผิดพลาด



หลังจากเพิ่มตัวเองไปยังกลุ่มให้ทำ `newgrp docker; newgrp กลุ่มหลักนี้สร้าง subshell ด้วยกลุ่มหลักของนักเทียบท่าใหม่จากนั้นสร้างกลุ่มหลักที่ถูกต้องอีกครั้ง (แฮ็คสักหน่อย)
ctrl-alt-delor

2

สำหรับสิ่งที่คุ้มค่าฉันลองวิธีแก้ปัญหาทั้งหมดในคำถามนี้และในคำถามที่เกี่ยวข้องนี้และไม่มีใครแก้ปัญหาของฉันจนกว่าฉันจะถอนการติดตั้งและติดตั้งVirtualBoxใหม่ กระบวนการนี้อัพเกรด VirtualBox จากเวอร์ชั่น 4.2.16 เป็น 4.3.22 (อันก่อนหน้านี้ของฉันไม่ได้ใช้งานระบบมาหลายเดือนแล้ว)

จากนั้นboot2dockerและdockerทำงานโดยไม่มีการปรับแต่งอื่น ๆ



2

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

sudo groupadd docker
sudo usermod -aG docker $USER

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

docker run hello-world

แหล่งที่มา: จัดการนักเทียบท่าในฐานะผู้ใช้ที่ไม่ใช่รูท


1

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



0

ฉันประสบปัญหาเดียวกันเมื่อฉันสร้างภาพ Docker จาก Jenkins เพียงเพิ่มผู้ใช้ในdockerกลุ่มจากนั้นเริ่มบริการ Docker ใหม่และในกรณีของฉันฉันต้องเริ่มบริการ Jenkins ใหม่

นี่เป็นข้อผิดพลาดที่ฉันได้รับ:

http:///var/run/docker.sock/v1.19/build?cgroupparent=&cpuperiod=0&cpuquota=0&cpusetcpus=&cpusetmems=&cpushares=0&dockerfile=Dockerfile&memory=0&memswap=0&rm=1&t=59aec062a8dd8b579ee1b61b299e1d9d340a1340: dial unix /var/run/docker.sock: permission denied. Are you trying to connect to a TLS-enabled daemon without TLS?
FATAL: Failed to build docker image from project Dockerfile
java.lang.RuntimeException: Failed to build docker image from project Dockerfile

Solution:

[root@Jenkins ssh]# groupadd docker
[root@Jenkins ssh]# gpasswd -a jenkins docker
Adding user jenkins to group docker
[root@Jenkins ssh]# /etc/init.d/docker restart
Stopping docker:                                           [  OK  ]
Starting docker:                                           [  OK  ]
[root@Jenkins ssh]# /etc/init.d/jenkins restart
Shutting down Jenkins                                      [  OK  ]
Starting Jenkins                                           [  OK  ]
[root@Jenkins ssh]#

-1

อีกสาเหตุที่เป็นไปได้คือBIOSของคุณไม่ได้เปิดใช้งานการสร้างภาพ ไปและเปิดใช้งานก่อน!

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