Không thể kết nối với docker từ docker-compose


163

Tôi đã cài đặt docker-machine 0.1.0 và docker-compose 1.1.0 trên Mac OS 10.8.5.
Docker-machine đang chạy bình thường và có thể kết nối bằng ssh docker-machine.

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

Tuy nhiên không thể kết nối từ docker-compose.

$ docker-compose up

Không thể kết nối với Docker daemon tại http + unix: //var/run/docker.sock - nó có chạy không?

Nếu nó ở một vị trí không chuẩn, hãy chỉ định URL với biến môi trường DOCKER_HOST.

Dockerfile và docker-compose.yml của tôi ở đây.

Dockerfile

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

docker-compose.yml

web:
  build: .

Tại sao không thể kết nối? Có ý kiến ​​gì không?


49
docker-machinechạy như root không? Tôi vừa mới đến đây với cùng một vấn đề trên Ubuntu và đó là quyền trên ổ cắm - sudođã thực hiện thủ thuật này.
SLD

7
Đối với những người trên Linux, bạn có thể chỉ cần được thêm vào nhóm docker .
Batandwa

5
chỉ cần chạy: sudo docker-compose up
Girish Gupta

Tôi gặp vấn đề tương tự. Bạn cần khởi động lại docker. sudo service docker restarthoặc sudo service docker starttôi đã giải quyết nó với điều này.
OM Bharatiya

Đối với những người sử dụng Ubuntu, bạn nên sử dụng sudo và bạn không nên thêm người dùng vào nhóm docker . Xem các ý kiến trong các câu trả lời được chấp nhận: askubuntu.com/questions/477551/...
Kas

Câu trả lời:


89

Máy Docker đang chạy. Nhưng bạn cần xuất một số môi trường để kết nối với máy Docker. Theo mặc định, ứng dockerdụng khách CLI đang cố gắng giao tiếp với trình nền bằng cách sử dụng http+unix://var/run/docker.sock(như được hiển thị trong thông báo lỗi).

Xuất các biến môi trường chính xác bằng cách sử dụng eval $(docker-machine env dev)và sau đó thử lại. Bạn cũng có thể chạy docker-machine env devđể xem các biến môi trường mà nó sẽ xuất. Lưu ý rằng một trong số đó là DOCKER_HOST, giống như thông báo lỗi cho thấy bạn có thể cần phải đặt.


2
Bạn có thể đặt lệnh đó ( eval "$(docker-machine env default)") trong thùng / postactivate của mình để đảm bảo nó luôn cập nhật.
Dannid

1
Tôi tìm tệp bin / postactivate ở đâu?
Lukas Schulze

Hoặc bạn quên cài đặt docker: $ eval $(docker-machine env dev) Command 'docker-machine' not found, but can be installed with: sudo snap install docker
R OMS

224

Giải pháp đơn giản cho tôi: sudo docker-compose up


CẬP NHẬT 2016-3-14: Tại một số thời điểm trong quy trình cài đặt docker (hoặc docker-compose?), Có một gợi ý và ví dụ để thêm tên người dùng của bạn vào nhóm "docker". Điều này cho phép bạn tránh cần "sudo" trước tất cả các lệnh docker, như vậy:

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

Xem xét kỹ đầu ra của các lệnh cài đặt (cả docker & cài đặt thứ 2 cho docker-compose) và bạn sẽ tìm thấy bước cần thiết. Nó cũng được ghi lại ở đây: https://subosito.com/posts/docker-tips/

Sudo? Không!

Mệt mỏi vì phải gõ sudo docker mỗi khi bạn ra lệnh? Vâng, có một cách để đối phó với điều đó. Mặc dù docker tự nhiên yêu cầu người dùng root, chúng ta có thể cung cấp một nhóm tương đương với root cho các hoạt động của docker.

Bạn có thể tạo một nhóm được gọi là docker, sau đó thêm người dùng mong muốn vào nhóm đó. Sau khi khởi động lại dịch vụ docker, người dùng sẽ không cần phải gõ sudo mỗi lần thực hiện các thao tác docker. Nó trông như thế nào trên một lệnh shell? như một gốc, ở đây bạn đi:

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

Làm xong!

CẬP NHẬT 2017-3-9

Hướng dẫn cài đặt Docker đã được cập nhật ở đây.

Các bước sau khi cài đặt cho Linux

Phần này chứa các quy trình tùy chọn để định cấu hình máy chủ Linux để hoạt động tốt hơn với Docker.

Quản lý Docker với tư cách là người dùng không root

Trình nền của docker liên kết với một ổ cắm Unix thay vì cổng TCP. Theo mặc định, ổ cắm Unix được sở hữu bởi người dùng root và những người dùng khác chỉ có thể truy cập nó bằng sudo. Trình nền docker luôn chạy như người dùng root.

Nếu bạn không muốn sử dụng sudo khi bạn sử dụng lệnh docker, hãy tạo một nhóm Unix có tên là docker và thêm người dùng vào nó. Khi trình nền của docker khởi động, nó làm cho quyền sở hữu của ổ cắm Unix được đọc / ghi bởi nhóm docker.

Để tạo nhóm docker và thêm người dùng của bạn:

# 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

Lệnh này tải xuống một hình ảnh thử nghiệm và chạy nó trong một thùng chứa. Khi container chạy, nó sẽ in một thông báo thông tin và thoát.


1
Tương tự như vậy vì một số lý do, sudo là cách duy nhất để nó hoạt động: O: O: O
Jamie Hutber 14/03/2016

12
Thay vì đăng xuất ... bạn có thể sử dụng lệnh:newgrp docker
Thiago Falcao

Ahh câu trả lời chi tiết với câu hỏi phụ :-)
Sukumaar

1
Re: "Giải pháp đơn giản cho tôi: sudo docker-compose up". Khi tôi thử điều đó, tôi nhận được:sudo: docker-compose: command not found
mblakesley

37

Nếu bạn đã bắt đầu sử dụng docker sudo, thì bạn nên chạy docker-compose với sudo Like:sudo docker-compose up


Nó làm việc cho tôi khi tôi chạy sudo docker-compose buildthay vì docker-compose build.
anms_pro

26

Theo mặc định, trình nền của docker luôn chạy như người dùng root, do đó bạn cần phải thêm vào sudo(các) lệnh Docker của mình.

Nếu bạn không muốn sử dụng sudo khi bạn sử dụng lệnh docker, hãy tạo một nhóm Unix có tên là docker và thêm người dùng vào nó. Khi trình nền của docker khởi động, nó làm cho quyền sở hữu của ổ cắm Unix được đọc / ghi bởi nhóm docker.

Để tạo nhóm docker và thêm người dùng của bạn:

  1. Tạo nhóm docker.

    $ sudo groupadd docker

  2. Thêm người dùng của bạn vào nhóm docker.

    $ sudo usermod -aG docker $USER

  3. Đăng xuất và đăng nhập lại để thành viên nhóm của bạn được đánh giá lại.

  4. Xác minh rằng bạn có thể docker các lệnh mà không cần sudo.

    $ docker run hello-world

Lệnh này tải xuống một hình ảnh thử nghiệm và chạy nó trong một thùng chứa. Khi container chạy, nó sẽ in một thông báo thông tin và thoát.

Các bước được nêu ở trên đến từ tài liệu Docker chính thức .


Làm thế nào chúng ta có thể làm điều này trên windows cài đặt Docker?
Jeff Cook

Bên cạnh đó, những gì tôi đã làm để sửa lỗi docker-compose là đặt người dùng thực thi docker-composelàm chủ sở hữu /usr/local/bin/docker-composevà sau đó khởi động lại dịch vụ
Sam

grouptư cách thành viên có thể được làm mới với su - $USERđể tiết kiệm đăng nhập & bật
Stuart Cardall

19

Khi bạn gặp lỗi :

LRI: Không thể kết nối với Docker daemon tại http + docker: // localhost - nó có chạy không?

Các giải pháp sẽ là:

  1. Trước tiên, hãy thử xác minh Dịch vụ Docker đang hoạt động như mong đợi trên máy từ xa / cục bộ của bạn:sudo service docker status

    nếu Không - chạy sudo service docker start hoặc sudo systemctl start docker(phụ thuộc vào một số phiên bản linux, hãy xem Docker bắt đầu hướng dẫn ).

  2. Thứ hai, bắt đầu docker là sudo sudo docker-compose up


16

sudo systemctl start docker - để bắt đầu dịch vụ Docker.

sudo docker-compose up sau đó.

Tôi có Fedora 26 và đang cố gắng giải quyết vấn đề tương tự, cuối cùng tôi đã vào Docker Compose trên trang của Fedora Developers và sau đó là Docker trên trang Fedora Developers , đã giúp tôi.

Có lẽ, dịch vụ docker được cộng đồng xem xét bắt đầu với hệ thống và chạy ở chế độ nền mọi lúc, nhưng đối với tôi nó không quá rõ ràng và đó là lý do tôi có thể nghĩ tại sao không có câu trả lời phổ biến như thế này.

Trên trang của Nhà phát triển Fedora có hướng dẫn cách bật Docker để bắt đầu với hệ thống:

sudo systemctl enable docker


Thay thế systemctlbằng launchctlnếu bạn đang chạy trên mac.
Rohit Swami

6

Nếu bạn đang dùng Linux, có thể bạn chưa docker-machinecài đặt vì nó chỉ được cài đặt theo mặc định trên máy tính Windows và Mac.

Nếu vậy, bạn sẽ cần phải truy cập: https://docs.docker.com/machine/install-machine/ để tìm hướng dẫn về cách cài đặt nó trên phiên bản Linux của bạn.

Sau khi cài đặt, thử lại chạy docker-compose uptrước khi thử bất cứ điều gì được liệt kê ở trên.

Hy vọng điều này sẽ giúp được ai đó. Điều này làm việc cho cài đặt Devilbox của tôi trong Fedora 25.


5

Ngoài việc thêm người dùng vào nhóm docker, để tránh gõ sudolặp đi lặp lại, bạn cũng có thể tạo bí danh cho dockercác lệnh như vậy:

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

4

nếu bạn đang sử dụng docker-machine thì bạn phải kích hoạt môi trường bằng biến env . Trong trường hợp bạn không sử dụng docker-machine thì hãy chạy các lệnh của bạn với sudo


3

Bất cứ ai cũng kiểm tra nhật ký?

Trong trường hợp của tôi, thông báo lỗi /var/log/upstart/docker.loglà:

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" 

Đáng nói là tôi đã bật vpn, vì vậy: $ sudo service openvpn stop $ sudo service docker restart $ docker-compose up|start $ sudo service openvpn start là giải pháp.


3

Trả lời từ @srfrnk làm việc cho tôi.

Trong tình huống của tôi, tôi đã có tệp docker-compose.yml tiếp theo:

  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-runtimechủ sở hữu và nhóm - là rootkhi chủ sở hữu tệp khác - người dùng của tôi. Khi tôi cố gắng xây dựngnginx

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

Tôi đã thêm ./docker-runtimevào .dockerignorevà nó đã được giải quyết vấn đề của tôi.


3

trong khi chạy docker-compose pull- tôi đã bị lỗi dưới đây

LRI: Không thể kết nối với Docker daemon tại http + docker: // localhost

nó đang chạy à

giải pháp -

sudo service docker start 

Vấn đề đã được giải quyết


2

Tôi đã có những triệu chứng tương tự.

Chỉ khác là nó chỉ xảy ra trong khi docker-compose build docker pslàm việc. Đã xảy ra với phiên bản 2.xcũng như 3.x. Đã khởi động lại dockerdịch vụ, sau đó máy ... Thậm chí cài đặt lại docker+ docker-compose.

Đã thử tất cả mọi thứ nhưng không có gì giúp được.

Cuối cùng tôi đã thử xây dựng Dockerfile "thủ công" bằng cách sử dụng docker build.

Rõ ràng tôi có một vấn đề cấp phép trên một tập tin / thư mục trong Dockerbối cảnh. Nó đã cố đọc bối cảnh khi bắt đầu xây dựng và thất bại với một thông báo lỗi thích hợp. Tuy nhiên, thông báo lỗi này không lan truyền đến docker-composemà chỉ hiển thịCouldn't connect to Docker daemon at http+unix://var/run/docker.sock - is it running?

Nhận thấy rằng giải pháp chỉ đơn giản là thêm tệp / thư mục vào .dockerignoretệp vì không cần thiết cho bản dựng. Một giải pháp khác có thể đã chownhoặc chmodnó.

Dù sao, điều này có thể giúp ai đó gặp phải cùng một vấn đề thực sự không liên quan dockervà thông báo lỗi gây hiểu lầm được hiển thị.


Tôi đã có cùng một vấn đề: quyền truy cập tập tin trong một khối lượng gắn kết. Trong trường hợp của tôi, tôi đã có một chứng chỉ SSL được sở hữu bởi root đã được đặt trong một khối Docker. chown/ đã chmodsửa nó. Thông báo lỗi khủng khiếp nhưng họ đang làm việc với nó. Xem github.com/docker/compose/issues/5318
bcattle

2

$ sudo docker-soạn

Tôi đã làm theo các bước như trong câu trả lời ở trên để thêm $ USER vào nhóm docker. tôi không muốn thêm một docker nhóm mới bởi vì trong cài đặt docker của tôi, một nhóm có tên docker tự động được tạo.

Docker CE được cài đặt và chạy. Nhóm docker được tạo nhưng không có người dùng nào được thêm vào nó. Bạn cần sử dụng sudo để chạy các lệnh Docker. Tiếp tục cài đặt bài Linux để cho phép người dùng không có đặc quyền chạy các lệnh Docker và cho các bước cấu hình tùy chọn khác.

nhưng sử dụng docker-compose lên cũng không hoạt động. Nó đã đưa ra lỗi tương tự trước đó. Vì vậy, trong trường hợp của tôi (Ubuntu 18.10), sudo docker-compose up đã khắc phục sự cố.

ps: @Tiw cảm ơn vì lời khuyên.


1
Có lẽ tốt hơn hết là đặt giải pháp lên hàng đầu, và những người giải thích bên dưới nó. Ngoài ra, bạn có thể sử dụng các nút đó trên trình chỉnh sửa để định dạng câu trả lời của bạn tốt hơn.
Tiw

2

Tôi biết điều đó thật ngớ ngẩn, nhưng trong trường hợp của tôi, tôi chỉ cố gắng sudovà nó hoạt động như một cơ duyên.

trong trường hợp của bạn, chỉ cần thử: $ sudo docker-compose up


1

thử cái này:

sudo ln -s / usr / local / bin / docker-compose / usr / bin / docker-compose


1

Tôi đã giải quyết vấn đề bằng các bước sau

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

bây giờ docker-compose up đang hoạt động


0

Đối với tôi, tôi bắt đầu nâng cấp Docker và hủy bỏ giữa chừng. Tôi đã không nhận thấy rằng Docker không chạy (nếu có, có một biểu tượng ở thanh điều hướng trên cùng của Macbook của tôi, bởi pin còn lại, thời gian, v.v.). Khi tôi khởi chạy nó, và hoàn thành nâng cấp, docker-compose uphoạt động trở lại!


0

Thiết lập của tôi có hai trường hợp cho lỗi này:

  • __pycache__ các tệp được tạo bởi người dùng root sau khi tôi chạy các kiểm tra tích hợp bên trong container không thể truy cập được cho docker (cho bạn biết vấn đề ban đầu) và docker-compose (cho bạn biết về máy chủ docker một cách mơ hồ);
  • microk8s chặn cổng của tôi cho đến khi tôi dừng nó.


0

đăng xuất rồi lại giúp tôi Trong trường hợp của tôi, đó là cài đặt mới, tôi đã tạo một người dùng mới, nhóm mới sau đó thêm người dùng vào nhóm docker.

thoát lối ra

sau đó ssh vào máy chủ một lần nữa


0

Những điều sau đây làm việc cho tôi, tôi không chắc phần nào đã thực hiện thủ thuật:

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  
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.