Lệnh Docker không thể kết nối với Docker daemon


246

Tôi muốn chuyển sang Docker, vì vậy tôi mới bắt đầu loay hoay với nó. Tôi đã cài đặt Docker trên bản cài đặt VirtualBox Ubuntu 15.10 (Wily Werewolf) và như được đề xuất ở đây, sau đó tôi đã thử chạy một hình ảnh Docker nginx cơ bản :

$ docker run --name mynginx1 -P -d nginx
Cannot connect to the Docker daemon. Is the docker daemon running on this host?

Vì vậy, tôi đã kiểm tra xem Docker có đang chạy hay không:

$ 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 vr 2015-11-06 08:41:48 CET; 15min ago
     Docs: https://docs.docker.com
 Main PID: 7542 (docker)
   CGroup: /system.slice/docker.service
           └─7542 /usr/bin/docker daemon -H fd://

nov 06 08:41:47 kramer65-VirtualBox systemd[1]: Starting Docker Application Container Engine...
nov 06 08:41:47 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:47.900410966+01:00" level=info msg="API ...ock"
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.033514149+01:00" level=info msg="Fire...lse"
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.141594321+01:00" level=info msg="Defa...ess"
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.416294436+01:00" level=warning msg="Y...it."
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.565507576+01:00" level=info msg="Load...rt."
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.567907022+01:00" level=info msg="Load...ne."
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.567945214+01:00" level=info msg="Daem...ion"
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.567969891+01:00" level=info msg="Dock....9.0
nov 06 08:41:48 kramer65-VirtualBox systemd[1]: Started Docker Application Container Engine.
Hint: Some lines were ellipsized, use -l to show in full.

Điều này cho thấy rằng trình nền Docker thực sự đã chạy, nhưng để chắc chắn rằng tôi chỉ khởi động trình nền Docker bằng tay:

$ sudo docker daemon
INFO[0000] API listen on /var/run/docker.sock           
INFO[0000] [graphdriver] using prior storage driver "aufs" 
INFO[0000] Firewalld running: false                     
INFO[0000] Default bridge (docker0) is assigned with an IP address XXX.XX.X.X/XX. Daemon option --bip can be used to set a preferred IP address 
WARN[0000] Your kernel does not support swap memory limit. 
INFO[0000] Loading containers: start.                   

INFO[0000] Loading containers: done.                    
INFO[0000] Daemon has completed initialization          
INFO[0000] Docker daemon                                 commit=76d6bc9 execdriver=native-0.2 graphdriver=aufs version=1.9.0

Sau đó tôi đã thử chạy lại hình ảnh, nhưng với kết quả tương tự:

$ docker run --name mynginx1 -P -d nginx
Cannot connect to the Docker daemon. Is the docker daemon running on this host?

Tôi đã thử sudo'ing lệnh, nhưng không có kết quả. Tôi làm gì sai ở đây?


1
cùng một vấn đề Tôi cũng đang dùng Ubuntu 15.10 :(
Daniel Loureiro

1
cùng một vấn đề, Ubuntu 15.10
Lucas Tettamanti

1
Chỉ cần khởi động lại dịch vụ docker của bạn là tất cả. Cảm ơn @jim <pre> sudo docker khởi động lại dịch vụ </ pre>
Nasruddin

1
Nasruddin, điều đó chắc chắn KHÔNG làm việc cho tôi ... :-(
Rafael_Espericueta

1
Tôi đã phải khởi động lại máy để làm cho nó hoạt động.
romaroma

Câu trả lời:


443

Bạn cần thêm người dùng hiện tại của mình vào nhóm docker như sau:

sudo usermod -aG docker $(whoami)

sau đó đăng xuất và đăng nhập lại vào hệ thống hoặc khởi động lại hệ thống. kiểm tra bởidocker version

để biết thêm thông tin về cách cài đặt docker-engine theo tài liệu về docker


ngớ ngẩn nhưng nó cũng có tác dụng với tôi @RobinLoxley, đây sẽ là một câu trả lời thực sự không chỉ là một bình luận, hãy cho tôi biết nếu bạn đăng nó, tôi sẽ cung cấp cho bạn một upvote;)
benka 5/2/2016

9
Tôi sẽ gạch chân "đăng xuất và đăng nhập lại vào hệ thống hoặc khởi động lại hệ thống"
Michele

3
Câu trả lời @Junaid dưới đây cho thấy cách tránh bước đăng xuất / đăng nhập, trong trường hợp bạn cũng như tôi, thật lười biếng, bạn không muốn khởi động lại ứng dụng của mình;)
brandizzi

Đây chính xác là những gì được đề cập trong hướng dẫn Docker, nhưng đăng xuất và đăng nhập lại không hiệu quả với tôi. Tôi đã phải khởi động lại hệ thống để làm cho nó hoạt động.
aalaap

4
Tôi thấy thông tin phiên bản Cannot connect to the Docker daemon. Is the docker daemon running on this host?
docker

137

Thêm người dùng vào nhóm docker

  • Thêm nhóm docker nếu nó chưa tồn tại:

    sudo groupadd docker

  • Thêm người dùng được kết nối "$ {USER}" vào nhóm docker:

    sudo gpasswd -a ${USER} docker

  • Khởi động lại daemon Docker:

    sudo service docker restart

  • Hoặc thực hiện newgrp dockerhoặc đăng xuất / đăng nhập để kích hoạt các thay đổi cho các nhóm.


1
Có vẻ như newgrp dockerlà cục bộ của vỏ, không phải là phiên đăng nhập. Điều này không rõ ràng từ trang người đàn ông.
bergey

1
Đã làm cho tôi. Cảm ơn!
Apokai

Câu trả lời duy nhất đã làm việc! Trên một máy Linux đám mây riêng, và nó vẫn hoạt động!
Meghna Natraj

Đã hoạt động trên Ubuntu 18.04! Cảm ơn
Kshitij Saraogi

33

Thông thường, lệnh sau thực hiện thủ thuật:

sudo service docker restart

Điều này, thay vì docker startcho các trường hợp Docker dường như đã chạy.

Nếu điều đó hoạt động thì, như được đề xuất và trong một câu trả lời khác và về vấn đề GitHub này , nếu bạn chưa thêm mình vào nhóm docker, hãy làm điều đó bằng cách chạy:

sudo usermod -aG docker <your-username> 

Và bạn rất có thể tốt để đi.


Đối với bất kỳ ai khác va vào điều này, trong một số docker của hệ điều hành không bắt đầu ngay sau khi bạn cài đặt nó và kết quả là, điều tương tự cũng can't connect to daemon messagexuất hiện. Trong trường hợp này, trước tiên bạn có thể xác minh rằng Docker thực sự không chạy bằng cách kiểm tra trạng thái dịch vụ docker của bạn bằng cách thực thi:

sudo service docker status

Nếu đầu ra trông giống như: docker stop/waitingthay vào docker start/running, process 15378đó thì rõ ràng có nghĩa là Docker không hoạt động. Trong trường hợp này, đảm bảo bạn bắt đầu với:

sudo service docker start

Và, như trước đây, rất có thể bạn sẽ tốt để đi.


18

lưu ý đến bản thân: Tôi nhận được lỗi từ tiêu đề của câu hỏi khi tôi quên chạy dockerlệnh với sudo:

sudo docker run ...

[Ubuntu 15.10]


12

Có cùng một vấn đề và điều làm việc cho tôi là:
Kiểm tra quyền sở hữu của /var/run/docker.sock

ls -l /var/run/docker.sock

Nếu bạn không phải là chủ sở hữu thì hãy thay đổi quyền sở hữu bằng lệnh

sudo chown *your-username* /var/run/docker.sock

Sau đó, bạn có thể tiếp tục và thử thực hiện các lệnh docker không rắc rối: D


2
Sau khi sử dụng hết tất cả các khả năng khác, đây là những gì giúp nó hoạt động trên Sabayon / Gentoo Linux đối với tôi.
gerrit_hoekstra

Tập tin đó thuộc sở hữu của rootnhưng trong dockernhóm. Cách tiếp cận đúng là gán người dùng hiện tại của bạn cho dockernhóm, theo tài liệu của Docker:sudo groupadd docker && sudo usermod -aG docker $USER
Lucas Bustamante

9

Sau khi cài đặt mọi thứ và bắt đầu dịch vụ, hãy thử đóng thiết bị đầu cuối của bạn và mở lại, sau đó thử kéo hình ảnh của bạn

Biên tập

Tôi cũng gặp vấn đề này một lần nữa, nếu giải pháp trên không hiệu quả, hãy thử giải pháp này là lệnh dưới đây

sudo mv /var/lib/docker/network/files/ /tmp/dn-bak

Cân nhắc

Nếu lệnh trên hoạt động, có lẽ bạn đang gặp vấn đề về docker mạng, dù sao thì điều này sẽ giải quyết nó, để xác nhận điều đó, hãy xem nhật ký với lệnh dưới đây

tail -5f /var/log/upstart/docker.log

Nếu đầu ra có cái gì đó như thế

FATA[0000] Error starting daemon: Error initializing network controller: could not delete the default bridge network: network bridge has active endpoints 
/var/run/docker.sock is up

Bạn thực sự đang gặp vấn đề về mạng, tuy nhiên tôi vẫn chưa biết nếu lần sau bạn khởi động lại ( cập nhật , 2 tháng không gặp sự cố nữa), hệ điều hành của bạn sẽ gặp lại sự cố này và nếu đó là lỗi hoặc sự cố cài đặt

Phiên bản docker của tôi

Client:
 Version:      1.9.1
 API version:  1.21
 Go version:   go1.4.2
 Git commit:   a34a1d5
 Built:        Fri Nov 20 13:12:04 UTC 2015
 OS/Arch:      linux/amd64

Server:
 Version:      1.9.1
 API version:  1.21
 Go version:   go1.4.2
 Git commit:   a34a1d5
 Built:        Fri Nov 20 13:12:04 UTC 2015
 OS/Arch:      linux/amd64

8

Sau khi cài đặt docker trên Ubuntu, tôi đã chạy lệnh sau:

sudo service docker start

Bạn đã thử chưa?


6

Tôi đã từng gặp vấn đề tương tự. Đã đấu tranh trong hai ngày để giải quyết nó.

Nó chỉ hoạt động khi tôi đã làm:

  1. Theo Hướng dẫn của Docker , bạn cần thêm khóa Docker nếu chưa được thêm bằng cách sử dụng:

    $ sudo wget -qO- https://get.docker.com/gpg | sudo apt-key add -

  2. Sau đó, hãy đảm bảo bạn cấp đặc quyền docker cho chính mình bằng cách sử dụng:

    $ sudo usermod -aG docker $USER

Hy vọng điều này sẽ giúp bạn quá.


2
Bước 2 có thể được đơn giản hóa như sau:sudo usermod -aG docker $USER
johntellsall

5

nhập dưới dạng root ( sudo su) và thử điều này:

unset DOCKER_HOST
docker run --name mynginx1 -P -d nginx

Tôi cũng gặp vấn đề tương tự ở đây và lệnh docker chỉ hoạt động với quyền root và cũng với phần DOCKER_HOSTtrống này

PS: cũng lưu ý rằng cách chính xác và chính thức để cài đặt trên Ubuntu là sử dụng kho apt của họ (ngay cả vào ngày 15.10), chứ không phải với điều " wget " đó.


điều "wget" đó chỉ cần đặt kho chứa docker vào nguồn apt của bạn .... tức là điều tương tự bạn được yêu cầu tự làm theo "cách chính xác và chính thức" ....
Alar

1
Tôi sợ bạn sai, Alar. Phương thức "wget" sẽ thêm kho lưu trữ docker trong nguồn apt của bạn, điều này rất tốt, nhưng nó cũng sẽ làm nhiều việc xấu khác như đặt var DOCKER_HOST env var, điều này sẽ ngăn docker chạy ra khỏi hộp. Không phải vì cả hai phương pháp đều thêm docker vào repo mà cả hai đều giống nhau.
Daniel Loureiro

5

Đối với OSX :

Sau khi mở docker và khởi động máy 'mặc định' thông qua Quickstart Terminal ( https://docs.docker.com/engine/installation/mac/ ), bạn thử các lệnh docker và nhận thông báo "không thể kết nối với docker daemon" này , hóa ra bạn cần một số biến env được đặt :

eval "$(docker-machine env default)"

Sau đó thử nó docker run hello-worldđể xem nếu mọi thứ là đào.


5

Đối với những người đã thử khởi động lại máy của bạn, bỏ đặt biến môi trường DOCKER_HOST như được nói trong tài liệu env của docker và tất cả những thứ còn lại chỉ cần thử đi với

sudo service docker restart

Chỉ có điều này đã lừa tôi ngay cả sau khi khởi động lại máy.


2
Điều này là bắt buộc nếu bạn chỉ đăng xuất và đăng nhập.
Zhang LongQI

4

Cung cấp quyền truy cập không root - từ docker

Thêm nhóm docker nếu nó không tồn tại.

$ sudo groupadd docker

Thêm người dùng được kết nối "$ {USER}" vào nhóm docker.

Thay đổi tên người dùng để phù hợp với người dùng ưa thích của bạn.

Bạn có thể phải đăng xuất và đăng nhập lại để điều này có hiệu lực.

$ sudo gpasswd -a ${USER} docker

Khởi động lại daemon Docker.

$ sudo service docker restart

3

Câu hỏi này hiện đang là số 3 trên một tìm kiếm Google. Sau khi thực hiện một số nghiên cứu để giải quyết vấn đề này trên hệ thống Linux của tôi, tôi nghĩ rằng mình sẽ viết câu trả lời này. Bài đăng gốc nêu vấn đề là trên Ubuntu nhưng tôi cũng gặp vấn đề khi sử dụng Fedora. Với ý nghĩ đó, đây là những gì tôi đã làm để khắc phục vấn đề.

Trên Fedora 22

Cài đặt Docker:

$> curl -fsSL https://get.docker.com/ | sh

Sau khi cài đặt Docker:

Một người dùng cần phải được thêm vào nhóm docker.

$> sudo usermod -aG docker

Trình nền docker cần được bắt đầu

$> sudo service docker start

Bạn có thể thiết lập daemon để bắt đầu khi khởi động

$> sudo chkconfig docker on

Bạn có thể xác minh dịch vụ docker đang chạy

$> service docker status

Và một kiểm tra cuối cùng

$> docker run hello-world

Trên Fedora 23, nhóm này có thể được gọi dockerroot. Ngoài ra, bạn có thể muốn cài đặt nó từ kho lưu trữ (thay vì curl ... | sh) để có thể cập nhật sau:dnf install docker
basic6

nhiều người không có nhóm "docker", vì vậy chúng tôi phải thêm nó trước groupadd dockervà sau đó thêm nó vào tên người dùng của bạnsudo usermod -aG docker your_username
TonyTony

2

Hãy thử sử dụng "sudo" với lệnh bạn đang chạy.


"Tôi đã thử sudo'ing lệnh, nhưng vô ích. Có ai biết tôi đang làm gì sai ở đây không? Tất cả các mẹo đều được chào đón!"
RhinoDevel

2

Tôi có vấn đề tương tự trong khi chạy docker.

bạn có thể chạy các lệnh như người dùng sudo :

sudo docker ***your command here***

2

Đối với Ubuntu:
Đã xảy ra với tôi khi tôi cập nhật docker.
Bạn cần vạch mặt dịch vụ và ổ cắm và sau đó khởi động lại dịch vụ.

Sau đây làm việc cho tôi:

systemctl unmask docker.service
systemctl unmask docker.socket
systemctl start docker.service

Những gì xảy ra đằng sau hậu trường
systemd cũng có khả năng đánh dấu một đơn vị là hoàn toàn không thể khởi động, tự động hoặc thủ công, bằng cách liên kết nó với / dev / null. Điều này được gọi là mặt nạ đơn vị, và có thể với lệnh mặt nạ.

sudo systemctl mask docker.service

Bạn có thể kiểm tra danh sách các dịch vụ đeo mặt nạ bằng cách sử dụng:

sudo systemctl list-unit-files

Đầu ra của tập tin danh sách đơn vị sudo systemctl

Để bật tự động / bắt đầu dịch vụ, bạn cần vạch mặt bằng cách sử dụng:

sudo sytemctl unmask docker.service

Bây giờ dịch vụ sẽ được kích hoạt như hình dưới đây nhập mô tả hình ảnh ở đây


1

Vì docker liên kết với một ổ cắm unix được sở hữu bởi root trong khi khởi động, sử dụng 'sudo' cùng với các lệnh docker sẽ hoạt động.


1
  1. Tôi cũng có vấn đề tương tự. Vấn đề là ở các socket được phân bổ cho docker-daemon và docker-client.
  2. Đầu tiên, quyền không được đặt cho docker-client trên docker.sock Bạn có thể đặt nó bằng cách sử dụng "sudo usermod -aG docker $ USER"
  3. Sau đó kiểm tra tệp bash của bạn nơi docker-client đang chạy, Đối với tôi, đó là vào ngày 0.0.0.0:2375, trong khi docker-daemon đang chạy trên ổ cắm unix. (Nó được đặt trong tệp cấu hình của dockerd).
  4. Chỉ cần bình luận bash-line và nó sẽ hoạt động tốt.
  5. Nhưng nếu bạn muốn làm cho nó hoạt động trên cổng TCP thay vì ổ cắm unix, hãy thay đổi tệp cấu hình của dockerd và đặt nó vào 0.0.0.0.2375 và giữ dòng trong bash như hiện tại hoặc đặt thành 0,0.0.0: 2375.

1

Có lẽ điều này sẽ giúp được ai đó, vì thông báo lỗi cực kỳ không có ích, và tôi đã trải qua tất cả các bước cho phép tiêu chuẩn nhiều lần mà không có kết quả.

Docker thỉnh thoảng để các biến môi trường ma ở vị trí chặn truy cập, mặc dù hệ thống của bạn được thiết lập chính xác. Các lệnh shell sau đây có thể làm cho nó có thể truy cập lại được, nếu bạn đã chạy nó tại một thời điểm và nó chỉ dừng hoạt động sau khi khởi động lại:

unset DOCKER_HOST
unset DOCKER_TLS_VERIFY
unset DOCKER_TLS_PATH
docker ps

Tôi đã cài đặt docker hoạt động trước đó và sau khi khởi động lại máy tính xách tay của tôi, nó chỉ đơn giản là từ chối hoạt động. Đã được bổ sung một cách chính xác vào nhóm người dùng Docker, có các điều khoản chính xác trên ổ cắm, vv, nhưng vẫn có thể không chạy docker login, docker run ..., vv Điều này cố định nó cho tôi. Thật không may, tôi phải chạy cái này trên mỗi lần khởi động lại. Điều này được đề cập trên một số vấn đề của github cũng là một cách giải quyết, mặc dù có vẻ như đó là một lỗi mà đây là một rào cản dai dẳng đối với hoạt động chính xác của Docker (lưu ý: Tôi đang dùng Arch Linux, không phải OSX, nhưng đây là vấn đề tương tự đối với tôi).


1

Đã thử nghiệm trong Ubuntu 16.04

# Create the docker group and add your user to the docker group
groupadd docker
usermod -aG docker $USER
newgrp docker

# Configure docker service to be exposed
mkdir -p /etc/systemd/system/docker.service.d
echo -e '[Service]\nExecStart=\nExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2376' >> /etc/systemd/system/docker.service.d/override.conf

# restart service
systemctl daemon-reload
service docker restart

0

Tôi đã gặp phải lỗi tương tự trên ví dụ Amazon EC2. Vấn đề đã được khắc phục sau khi khởi động lại ví dụ.


0

Thêm người dùng hiện tại vào nhóm docker:

sudo usermod -aG docker $(whoami)


Vui lòng định dạng này dưới dạng mã! Và giải thích lệnh này. Và sử dụng các --phiên bản dài (bắt đầu bằng ) của các tùy chọn.
buhtz

0

Dành cho Ubuntu 16.04

/lib/systemd/system/docker.serviceThay đổi tập tin bên trong :

ExecStart=/usr/bin/dockerd fd://

với:

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375

/etc/init.d/dockerThay đổi tập tin bên trong :

DOCKER_OPTS=

với:

DOCKER_OPTS="-H tcp://0.0.0.0:2375"

và sau đó khởi động lại máy tính của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.