Docker-Compose không thể kết nối với Docker Daemon


114

Tôi nhận được thông báo lỗi cho biết tôi không thể kết nối với daemon docker. Tôi đã xem xét câu trả lời của những người khác gặp vấn đề tương tự nhưng không giúp được gì. Tôi đang chạy phiên bản Ubuntu 15.10. Tôi sẽ cố gắng cung cấp tất cả thông tin tôi có.

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.

Phiên bản 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?

Phiên bản Docker-Compose

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

Đây là điều sẽ xảy ra nếu tôi cố gắng dừng hoặc bắt đầu dịch vụ ...

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

Nếu tôi chạy 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

Mọi sự trợ giúp sẽ rất được trân trọng. Hãy cho tôi biết nếu bạn có thể cần thêm thông tin.


1
Vui lòng không phá hoại bài viết của bạn. Khi bạn đã đăng câu hỏi, bạn đã cấp phép nội dung cho cộng đồng Stack Overflow nói chung (theo giấy phép CC-by-SA). Nếu bạn muốn hủy liên kết bài đăng này khỏi tài khoản của mình, hãy xem Cách thích hợp cho yêu cầu hủy liên kết là gì? .
Lỗi

Câu trả lời:


266

Tôi đã gặp lỗi tương tự, sau 15 phút gỡ lỗi. Hóa ra tất cả những gì nó cần là sudo:) Kiểm tra [Tạo nhóm Docker] tại đây https://docs.docker.com/engine/installation/linux/ubuntulinux/ để loại bỏ tiền tố sudo.


35
Họ cần một lỗi tốt hơn = / Câu hỏi này có 13.000 điểm
Jonathan


5
cách khắc phục thực sự là tạo nhóm docker, trong khi đó sudochỉ là một cách giải quyết / hack, theo ý kiến ​​của tôi. vì phần tạo nhóm không được giải thích ở đây, chỉ có một liên kết được đưa ra và nội dung của liên kết đó đã thay đổi, tôi coi đây là một câu trả lời chỉ liên kết và về cơ bản nó vô dụng (đối với phần sửa lỗi thực sự). bạn có thể thêm mô tả về cách thêm nhóm đó không?
hoijui

2
Tôi nghĩ đó sudolà một ý tưởng tồi. Xem tài liệu Docker để quản lý Docker với tư cách người dùng không phải root: docs.docker.com/engine/installation/linux/linux-postinstall/…
jwhitlock

6
Về cơ bản, tất cả những gì bạn cần làm là sudo usermod -aG docker $USERvà nó sẽ hoạt động sau đó.
user2340939

65

Tôi đã gặp vấn đề này và không muốn làm rối tung mọi thứ khi sử dụng sudo. Khi điều tra, tôi đã cố gắng lấy một số thông tin:

docker info

Thật bất ngờ, tôi đã gặp lỗi sau:

Đã bị từ chối quyền khi cố gắng kết nối với ổ cắm Docker daemon tại unix: ///var/run/docker.sock: Lấy http: ///var/run/docker.sock/v1.38/info : dial unix / var /run/docker.sock: connect: quyền bị từ chối

Vì một số lý do tôi không có đủ đặc quyền, lệnh sau đã giải quyết được sự cố của tôi:

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

Et voilà!


Làm thế nào về sau khi khởi động lại docker một lần nữa? Chúng ta phải làm lại điều này?
Light.G

Không, nó sẽ hoạt động khi bạn khởi động lại docker. Nhưng tôi không chắc điều gì sẽ xảy ra nếu bạn khởi động lại máy của mình.
madjaoue

Theo mặc định, Docker sẽ giữ docker.sockvới một nhóm không phải gốc, dockernhư mặc định. Nhưng chúng ta có thể thay đổi điều đó bằng -Gcờ trong quá trình khởi chạy Docker daemon. Trong trường hợp của tôi, tôi thêm một nhóm cho $USERNAME, nghĩa là thêm nhóm docker, sau đó khởi động lại máy của tôi (ubuntu 16.04, PC). Nó hoạt động tốt. Và điều này được khuyến khích trong tài liệu của docker.
Light.G

3
Hoạt động cho tôi quá :)
Kamil J.

27

Có vẻ như sự cố của bạn đã được tạo ra bởi một lỗi Docker cũ, trong đó tệp socket không được tạo lại sau khi Docker gặp sự cố. Nếu đây là sự cố, thì việc đổi tên tệp socket sẽ cho phép nó được tạo lại:

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

Vì lỗi này đã được sửa, nên hầu hết mọi người gặp lỗi Couldn't connect to Docker daemoncó thể là do họ không ở trong dockernhóm và không có quyền đọc tệp đó. Chạy với sudo docker ...sẽ khắc phục được điều đó, nhưng không phải là một giải pháp tuyệt vời.

Docker có thể được chạy với tư cách là người dùng không phải root (không có sudo) có quyền nhóm thích hợp. Tài liệu sau cài đặt Linux có các chi tiết. Phiên bản ngắn:

$ 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

Điều này cho phép người dùng trong dockernhóm chạy dockerdocker-composera lệnh mà không cần sudo. Docker tự chạy root, cho phép một số cuộc tấn công, vì vậy bạn vẫn cần phải cẩn thận với những vùng chứa bạn chạy. Xem Tài liệu Bảo mật Docker để biết thêm chi tiết.


Câu hỏi này dành riêng cho cài đặt Linux và bản sửa lỗi liên quan đến các thay đổi trên hệ thống máy chủ Linux để khắc phục. Bạn sẽ nhận được thông tin tốt hơn nếu bạn đăng một câu hỏi tương tự với cùng một chi tiết nhưng dành cho Windows. Để tự giải quyết, tôi khuyên bạn nên đọc kỹ tài liệu Docker dành cho Windows
jwhitlock

10

Tôi gặp vấn đề tương tự. Sau khi ghi chú và phân tích một số kết quả gỡ lỗi, cuối cùng, tôi đã giải quyết được lỗi tương tự. Bắt đầu dịch vụ trước,

service docker start

Đừng quên đưa người dùng của bạn vào nhóm docker.


Tôi đang chạy dưới quyền root khi gặp lỗi này. Có vẻ như đã sudosửa nó cho người khác -_- Rất vui khi thấy rằng nó thực sự là điều này, mà tôi đã quên làm. Quá đơn giản!
Will

8

Bạn nên thêm người dùng của mình vào nhóm "docker" bằng những thứ như:

sudo usermod -aG docker $ {USER}


5

Tôi gặp lỗi này khi có các tệp trong Dockerfilethư mục mà người dùng hiện tại không thể truy cập được. dockerdo đó không thể tải ngữ cảnh đầy đủ lên daemon và đưa ra thông báo " Không thể kết nối với daemon Docker tại http + docker: // localunixsocket ".


2
Cảm ơn! Điều này đã giải quyết nó cho tôi. Dễ dàng kiểm tra, vì tất cả các lệnh của docker đều hoạt động, nhưng docker -omp thì không. Ngoài ra, docker-compos đã hoạt động trong một thư mục khác. Thông báo lỗi rất dễ gây hiểu lầm, BTW.
Csongor Fagyal,

1
Điều này thực sự cần được lên cao hơn
Arlen Anderson

1
Cảm ơn! đã làm cho tôi. Sử dụng docker build .sẽ dẫn đến bất kỳ vấn đề về quyền nào.
everyman

Điều duy nhất đã hoạt động - tại sao các thông báo lỗi Docker lại tồi tệ như vậy? Cảm ơn!
coderMe

4

Một cách để giải quyết vấn đề này là trước tiên hãy thêm người dùng của bạn vào dockernhóm bằng cách chạy như sau

sudo usermod -aG docker $USER

QUAN TRỌNG: Hãy nhớ đăng xuất khỏi hệ thống của bạn (không chỉ thiết bị đầu cuối của bạn) và đăng nhập lại để điều này có hiệu lực!


sudo usermod -aG docker $ {USER} Chúng ta cũng nên đăng xuất và đăng nhập để áp dụng các thay đổi: su - $ {USER}
user3785966

3

Từ đầu ra của "ps aux | grep docker", có vẻ như trình nền docker không chạy. Hãy thử sử dụng các phương pháp dưới đây để xem điều gì không ổn và tại sao docker không khởi động

  1. Kiểm tra nhật ký của docker

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

  1. Thử khởi động docker ở chế độ gỡ lỗi

$ sudo docker -d -D


2

Trong trường hợp của tôi, dịch vụ docker của bạn có thể bị dừng

Lệnh để bắt đầu dịch vụ docker:

$ sudo systemctl start docker

Lệnh để xác minh nếu nó bắt đầu:

$ sudo docker run hello-world


2

Một lý do khác khiến lỗi này có thể xuất hiện: đối với tôi, đó là định nghĩa đường dẫn hình ảnh không đúng định dạng trong docker-compose.yml:

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

Nhìn thì được rồi, nhưng tôi đã CONTAINER_REGISTRY_BASE=eu.gcr.io/my-project/đặt trên env. Rõ ràng là //trong đường dẫn hình ảnh đã gây ra lỗi này.

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

2

chỉ cần thử với sudo. Có vẻ như vấn đề về quyền!

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

nó đã làm việc cho tôi.


1

Tôi đã sử dụng Ubuntu 16.04 và cũng thấy vấn đề này khi tôi sử dụng docker-comp. Tôi đã sửa nó bằng cách chạy lệnh này.

$ sudo systemctl start docker
$ sudo docker-compose build

1

Có một chút khả năng bạn đã xóa máy mặc định? Tuy nhiên, trước tiên hãy kiểm tra xem tất cả các tệp có ở đó không (OSX, tương tự trên các hệ thống khác)

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

Ngoài ra, hãy cài đặt Ứng dụng Docker, vì việc duy trì các vùng chứa dễ dàng hơn nhiều:

brew cask reinstall docker

ans khởi động ứng dụng Docker từ công cụ tìm (đợi cho đến khi dịch vụ được khởi động hoàn toàn)

Sau đó, kiểm tra cài đặt với:

docker-machine ls

nếu không có máy nào trong danh sách, hãy tạo một máy và khởi động nó:

docker-machine create default
docker-machine start default

Sau đó, xây dựng, soạn thảo và tất cả các lệnh khác sẽ hoạt động bình thường.


1

trong trường hợp của tôi, đó là vì quyền của ubuntu,

  1. Liệt kê mục

kiểm tra sự cho phép của

docker info 

nếu họ có quyền in sự cố, nhập mô tả hình ảnh ở đây thì hãy sử dụng

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

0

Đối với tôi, cách khắc phục là cài đặt phiên bản mới hơn (1.24) docker-composebằng cách sử dụng bài viết này .

Phiên bản trước (1.17) đã được cài đặt từ ubuntukho lưu trữ mặc định của, nhưng sau khi cài đặt phiên bản mới hơn, tôi đã cố gắng khởi chạy vùng chứa. Hy vọng nó sẽ giúp ai đó.


0

Tôi nghĩ đó là vì quyền truy cập, bạn chỉ cần viết

sudo docker-compose-deps.yml up

-1

Trong trường hợp của tôi, có cùng một lỗi khi tôi cố gắng docker-compose build và giải pháp của tôi chỉ là thêmsudo

sudo docker-compose build

-2

Tôi đã tìm thấy điều này và nó dường như đã khắc phục được sự cố của tôi.

GitHub Sửa lỗi Docker Daemon Crash

Tôi đã thay đổi nội dung của tệp docker-comp-deps.yml như trong liên kết. Sau đó tôi chạy docker-compose -f docker-compose-deps.yml up -d. Sau đó, tôi đã thay đổi nó trở lại và nó hoạt động vì một số lý do. Tôi không phải tiếp tục các bước trong liên kết mà tôi đã cung cấp, nhưng hai bước đầu tiên đã khắc phục sự cố cho tôi.


2
ubuntu 16.04: chỉ cần thêm sudo: sudo docker-soạn up -d
Moccine

Nó không đủ như một câu trả lời. Nếu bạn muốn chấp nhận câu trả lời của chính mình, bạn phải đưa ra lý do gốc rễ của vấn đề của bạn. Nếu không, nó sẽ thực sự gây hiểu lầm cho người khác. BTW, có những câu trả lời khác ở đây, chúng có giúp được gì không? Vì tôi không thấy bất kỳ bình luận nào của bạn.
Light.G
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.