Tidak dapat terhubung ke buruh pelabuhan dari komposisi buruh pelabuhan

163

Saya menginstal docker-machine 0.1.0 dan docker-compose 1.1.0 pada Mac OS 10.8.5.
Mesin docker berjalan normal dan dapat terhubung dengan mesin docker ssh.

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

Namun tidak dapat terhubung dari docker-compose.

$ docker-compose up

Tidak dapat terhubung ke daemon Docker di http + unix: //var/run/docker.sock - apakah ini berjalan?

Jika berada di lokasi yang tidak standar, tentukan URL dengan variabel lingkungan DOCKER_HOST.

Dockerfile dan docker-compose.yml saya ada di sini.

Dockerfile

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

docker-compose.yml

web:
  build: .

Kenapa tidak bisa terhubung? Ada ide?

DIGITALSQUAD
sumber
49
Apakah docker-machinedijalankan sebagai root? Saya baru saja datang ke sini dengan masalah yang sama pada Ubuntu dan itu adalah izin pada soket - sudomelakukan trik.
SLD
7
Bagi yang ada di Linux, Anda mungkin hanya perlu ditambahkan ke grup buruh pelabuhan .
Batandwa
5
jalankan: sudo docker-compose up
Girish Gupta
Saya memiliki masalah yang sama. Anda harus memulai kembali buruh pelabuhan. sudo service docker restartatau sudo service docker startsaya menyelesaikannya dengan ini.
OM Bharatiya
Bagi mereka yang menggunakan Ubuntu, Anda harus menggunakan sudo dan Anda tidak boleh menambahkan pengguna ke grup buruh pelabuhan . Lihat komentar dalam jawaban yang diterima: askubuntu.com/questions/477551/…
kas

Jawaban:

89

Mesin Docker sedang berjalan. Tetapi Anda perlu mengekspor beberapa lingkungan untuk terhubung ke mesin Docker. Secara default, dockerklien CLI berusaha berkomunikasi dengan daemon menggunakan http+unix://var/run/docker.sock(seperti yang ditunjukkan dalam pesan kesalahan).

Ekspor variabel lingkungan yang benar menggunakan eval $(docker-machine env dev)dan kemudian coba lagi. Anda juga bisa menjalankannya docker-machine env devuntuk melihat variabel lingkungan yang akan diekspor. Perhatikan bahwa salah satunya DOCKER_HOST, sama seperti pesan kesalahan menyarankan Anda mungkin perlu mengatur.

Andy Shinn
sumber
2
Anda dapat memasukkan perintah itu ( eval "$(docker-machine env default)") ke dalam nampan / postactivate Anda untuk memastikan selalu mutakhir.
Dannid
1
Di mana saya menemukan file bin / postactivate?
Lukas Schulze
Atau Anda lupa menginstal buruh pelabuhan: $ eval $(docker-machine env dev) Command 'docker-machine' not found, but can be installed with: sudo snap install docker
R OMS
226

Solusi sederhana untuk saya: sudo docker-compose up


UPDATE 2016-3-14: Di beberapa titik dalam proses instalasi buruh pelabuhan (atau menulis buruh pelabuhan?) Ada saran dan contoh untuk menambahkan nama pengguna Anda ke grup "buruh pelabuhan". Ini memungkinkan Anda untuk menghindari "sudo" sebelum semua perintah buruh pelabuhan, seperti:

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

Perhatikan dengan seksama pada output dari perintah install (baik docker & install ke-2 untuk docker-compose) dan Anda akan menemukan langkah yang diperlukan. Itu juga didokumentasikan di sini: https://subosito.com/posts/docker-tips/

Sudo? Tidak!

Bosan mengetik sudo docker setiap kali Anda mengeluarkan perintah? Ya, ada cara untuk menghadapinya. Meskipun buruh pelabuhan secara alami membutuhkan pengguna root, kami dapat memberikan grup yang setara dengan root untuk operasi buruh pelabuhan.

Anda dapat membuat grup yang disebut buruh pelabuhan, lalu menambahkan pengguna yang diinginkan ke grup itu. Setelah memulai kembali layanan buruh pelabuhan, pengguna tidak perlu mengetikkan sudo setiap kali melakukan buruh pelabuhan. Bagaimana tampilannya pada perintah shell? sebagai root, ini dia:

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

Selesai!

PEMBARUAN 2017-3-9

Petunjuk pemasangan Docker telah diperbarui di sini.

Langkah-langkah pasca pemasangan untuk Linux

Bagian ini berisi prosedur opsional untuk mengonfigurasi host Linux agar berfungsi lebih baik dengan Docker.

Kelola Docker sebagai pengguna non-root

Daemon docker mengikat ke soket Unix bukan port TCP. Secara default soket Unix dimiliki oleh root pengguna dan pengguna lain hanya dapat mengaksesnya menggunakan sudo. Daemon buruh pelabuhan selalu berjalan sebagai pengguna root.

Jika Anda tidak ingin menggunakan sudo saat menggunakan perintah buruh pelabuhan, buat grup Unix yang disebut buruh pelabuhan dan tambahkan pengguna ke dalamnya. Ketika daemon buruh pelabuhan mulai, itu membuat kepemilikan soket Unix dibaca / ditulis oleh kelompok buruh pelabuhan.

Untuk membuat grup buruh pelabuhan dan menambahkan pengguna Anda:

# 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

Perintah ini mengunduh gambar uji dan menjalankannya dalam wadah. Ketika wadah berjalan, ia mencetak pesan informasi dan keluar.

Alan Thompson
sumber
1
Demikian juga untuk beberapa alasan, sudo adalah satu-satunya cara untuk membuatnya bekerja: O: O: O
Jamie Hutber
12
Alih-alih logout ... Anda dapat menggunakan perintah:newgrp docker
Thiago Falcao
Ahh jawaban terperinci dengan subquestion :-)
Sukumaar
1
Re: "Solusi sederhana untuk saya: sudo docker-compose up". Ketika saya mencobanya, saya mendapatkan:sudo: docker-compose: command not found
mblakesley
38

Jika Anda mulai menggunakan buruh pelabuhan sudo, maka Anda harus menjalankan pembuatan komposisi buruh pelabuhan dengan sudo Suka:sudo docker-compose up

Rohan Seth
sumber
Ini bekerja untuk saya ketika saya berlari sudo docker-compose buildbukan docker-compose build.
anms_pro
26

Secara default daemon docker selalu berjalan sebagai pengguna root, oleh karena itu Anda perlu menambahkan sudoke perintah Docker Anda.

Jika Anda tidak ingin menggunakan sudo saat menggunakan perintah buruh pelabuhan, buat grup Unix yang disebut buruh pelabuhan dan tambahkan pengguna ke dalamnya. Ketika daemon buruh pelabuhan mulai, itu membuat kepemilikan soket Unix dibaca / ditulis oleh kelompok buruh pelabuhan.

Untuk membuat grup buruh pelabuhan dan menambahkan pengguna Anda:

  1. Buat grup buruh pelabuhan.

    $ sudo groupadd docker

  2. Tambahkan pengguna Anda ke grup buruh pelabuhan.

    $ sudo usermod -aG docker $USER

  3. Logout dan log in kembali sehingga keanggotaan grup Anda dievaluasi kembali.

  4. Verifikasi bahwa Anda dapat merapat perintah tanpa sudo.

    $ docker run hello-world

Perintah ini mengunduh gambar uji dan menjalankannya dalam wadah. Ketika wadah berjalan, ia mencetak pesan informasi dan keluar.

Langkah-langkah yang diuraikan di atas berasal dari dokumentasi Docker resmi .

ndequeker
sumber
Bagaimana kita bisa melakukan ini pada Docker yang diinstal di windows?
Jeff Cook
Selain itu, apa yang saya lakukan untuk memperbaiki komposisi buruh pelabuhan adalah mengatur pengguna yang mengeksekusi docker-composesebagai pemilik /usr/local/bin/docker-composedan kemudian memulai kembali layanan
Sam
groupkeanggotaan dapat di-refresh dengan su - $USERuntuk menyimpan logging & on
Stuart Cardall
20

Saat Anda mendapatkan Kesalahan :

GALAT: Tidak dapat terhubung ke Docker daemon di http + docker: // localhost - apakah ini berjalan?

The Solution akan:

  1. Pertama, coba verifikasi Layanan Docker sudah Aktif dan Berjalan seperti yang diharapkan pada mesin remote / lokal Anda:sudo service docker status

    jika Tidak - jalankan sudo service docker start atau sudo systemctl start docker(tergantung pada beberapa versi linux, lihat petunjuk memulai Docker ).

  2. Kedua, mulai buruh pelabuhan sebagai sudo sudo docker-compose up

avivamg
sumber
16

sudo systemctl start docker - untuk memulai layanan Docker.

sudo docker-compose up setelah itu.

Saya memiliki Fedora 26, dan mencoba untuk menyelesaikan masalah yang sama saya akhirnya memasuki Docker Compose di halaman Fedora Developers dan kemudian Docker di halaman Fedora Developers , yang membantu saya.

Mungkin, layanan buruh pelabuhan dianggap oleh masyarakat untuk memulai dengan sistem dan berjalan di latar belakang sepanjang waktu, tetapi bagi saya itu tidak begitu jelas, dan itulah alasan saya bisa memikirkan mengapa tidak ada jawaban populer seperti ini.

Pada halaman Pengembang Fedora ada instruksi bagaimana mengaktifkan Docker untuk memulai dengan sistem:

sudo systemctl enable docker

Aleksei Alefirov
sumber
Ganti systemctldengan launchctljika Anda menjalankan di mac.
Rohit Swami
6

Jika Anda menggunakan Linux, Anda mungkin tidak docker-machinemenginstalnya karena hanya diinstal secara default pada komputer Windows dan Mac.

Jika demikian, Anda harus ke: https://docs.docker.com/machine/install-machine/ untuk menemukan petunjuk cara menginstalnya di versi Linux Anda.

Setelah menginstal, coba lagi jalankan docker-compose upsebelum mencoba apa pun yang tercantum di atas.

Semoga ini bisa membantu seseorang. Ini berfungsi untuk instalasi devilbox saya di Fedora 25.

specialk1st
sumber
5

Selain menambahkan pengguna ke grup buruh pelabuhan, untuk menghindari mengetik sudoberulang-ulang, Anda juga dapat membuat alias untuk dockerperintah seperti:

alias docker-compose="sudo docker-compose"
alias docker="sudo docker"
Shanu Gupta
sumber
4

jika Anda menggunakan mesin buruh pelabuhan maka Anda harus mengaktifkan lingkungan menggunakan variabel env . jika Anda tidak menggunakan mesin docker kemudian jalankan perintah Anda dengan sudo

Md Ch
sumber
3

Adakah yang memeriksa log?

Dalam pesan kesalahan kasus saya /var/log/upstart/docker.logadalah:

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" 

Layak untuk disebutkan saya telah dihidupkan, jadi: $ sudo service openvpn stop $ sudo service docker restart $ docker-compose up|start $ sudo service openvpn start adalah solusinya.

Sławomir Lenart
sumber
3

Jawaban dari @srfrnk bekerja untuk saya.

Dalam situasi saya, saya memiliki file docker-compose.yml berikutnya:

  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-runtimepemilik dan grup - adalah rootketika pemilik file lain - pengguna saya. Ketika saya mencoba membangunnginx

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

Saya menambahkan ./docker-runtimeuntuk .dockerignoredan itu memecahkan masalah saya.

Dima Storozhuk
sumber
3

saat menjalankan docker-compose pull- saya mendapatkan kesalahan di bawah ini

GALAT: Tidak dapat terhubung ke Docker daemon di http + docker: // localhost

apakah ini berjalan?

solusi -

sudo service docker start 

masalah terselesaikan

kumar
sumber
2

Saya memiliki gejala yang sama.

Hanya berbeda bahwa itu terjadi hanya selama docker-compose build docker psbekerja. Terjadi dengan versi 2.xjuga 3.x. dockerLayanan restart , maka mesin ... Bahkan diinstal ulang docker+ docker-compose.

Mencoba segalanya tetapi tidak ada yang membantu.

Akhirnya saya mencoba membangun Dockerfile "secara manual" dengan menggunakan docker build.

Tampaknya saya memiliki masalah izin pada file / folder di dalam Dockerkonteksnya. Itu mencoba membaca konteks ketika memulai membangun dan gagal dengan pesan kesalahan yang tepat. Namun pesan kesalahan ini tidak menyebar ke docker-composeyang hanya ditampilkanCouldn't connect to Docker daemon at http+unix://var/run/docker.sock - is it running?

Setelah menemukan bahwa solusinya hanyalah menambahkan file / folder ke .dockerignorefile karena itu tidak diperlukan untuk membangun. Solusi lain mungkin untuk chownatauchmod itu.

Bagaimanapun mungkin ini bisa membantu seseorang menemukan masalah yang sama yang tidak ada hubungannya dengan dockerdan pesan kesalahan yang menyesatkan ditampilkan.

srfrnk
sumber
Saya memiliki masalah yang sama: izin file dalam volume yang dipasang. Dalam kasus saya, saya memiliki sertifikat SSL yang dimiliki oleh root yang telah dimasukkan ke dalam volume Docker. chownSaya chmodmemperbaikinya. Pesan kesalahan mengerikan tetapi mereka sedang mengusahakannya. Lihat github.com/docker/compose/issues/5318
bcattle
2

$ sudo docker-compose up

Saya memang mengikuti langkah-langkah seperti pada jawaban di atas untuk menambahkan $ USER ke grup buruh pelabuhan. Saya tidak ingin menambahkan buruh pelabuhan grup baru karena dalam instalasi buruh pelabuhan saya grup bernama buruh pelabuhan dibuat secara otomatis.

Docker CE diinstal dan dijalankan. Grup buruh pelabuhan dibuat tetapi tidak ada pengguna yang ditambahkan. Anda perlu menggunakan sudo untuk menjalankan perintah Docker. Lanjutkan ke Linux postinstall untuk memungkinkan pengguna yang tidak memiliki hak istimewa untuk menjalankan perintah Docker dan untuk langkah-langkah konfigurasi opsional lainnya.

tetapi menggunakan docker-compose up juga tidak berhasil. Itu memberi kesalahan sebelumnya yang sama. Jadi dalam kasus saya (Ubuntu 18.10) sudo docker-menulis memperbaiki masalah.

ps: @Tiw terima kasih atas sarannya.

Nayananga Muhandiram
sumber
1
Mungkin lebih baik menempatkan solusinya terlebih dahulu, dan mereka yang menjelaskan di bawahnya. Anda juga dapat menggunakan tombol-tombol pada editor untuk memformat jawaban Anda dengan lebih baik.
Tiw
2

Saya tahu ini konyol, tetapi dalam kasus saya, saya baru saja mencobanya sudodan itu bekerja seperti pesona.

dalam kasus Anda, coba saja: $ sudo docker-compose up

Demobilizer
sumber
1

coba ini:

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

TBhavnani
sumber
1

Saya telah menyelesaikan masalah menggunakan langkah-langkah berikut

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

sekarang docker-compose up berfungsi

KARTHIKEYAN.A
sumber
0

Bagi saya, saya mulai meningkatkan Docker dan dibatalkan di tengah jalan. Saya tidak melihat bahwa Docker tidak berjalan (jika itu, ada ikon di bar nav atas Macbook saya, dengan baterai yang tersisa, waktu, dll). Setelah saya meluncurkannya, dan menyelesaikan upgrade, docker-compose upbekerja lagi!

Rock Lee
sumber
0

Pengaturan saya punya dua kasus untuk kesalahan ini:

  • __pycache__ file yang dibuat oleh pengguna root setelah saya menjalankan tes integrasi di dalam wadah tidak dapat diakses untuk buruh pelabuhan (memberitahu Anda masalah asli) dan menulis buruh pelabuhan (memberi tahu Anda tentang host buruh pelabuhan secara ambigu);
  • microk8s memblokir port saya sampai saya menghentikannya.
simno
sumber
0

Coba jalankan dockerdatau sudo dockerdjika diperlukan terlebih dahulu untuk memulai daemon. Jika Anda mulai dockerddengan sudoAnda mungkin ingin menjalankan docker-compose updengan sudojuga. kalau tidak, tidak apa-apa.

Solusi yang berfungsi dari https://github.com/docker/compose/issues/4181

Gathua Kiragu
sumber
0

keluar lalu masuk lagi membantu saya. Dalam kasus saya itu adalah instalasi baru, saya membuat pengguna baru, grup baru kemudian menambahkan pengguna ke grup buruh pelabuhan.

keluar dari pintu keluar

lalu ssh ke server lagi

Swelan Auguste
sumber
0

Berikut ini bekerja untuk saya, saya tidak yakin bagian mana yang melakukan trik:

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  
juliangonzalez
sumber