No se puede conectar a Docker desde docker-compose

163

Instalé docker-machine 0.1.0 y docker-compose 1.1.0 en Mac OS 10.8.5.
Docker-machine funciona normalmente y puede conectarse mediante docker-machine ssh.

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

Sin embargo, no se puede conectar desde docker-compose.

$ docker-compose up

No se pudo conectar con Docker Daemon en http + unix: //var/run/docker.sock: ¿se está ejecutando?

Si está en una ubicación no estándar, especifique la URL con la variable de entorno DOCKER_HOST.

Mi Dockerfile y docker-compose.yml está aquí.

Dockerfile

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

docker-compose.yml

web:
  build: .

¿Por qué no puedo conectarme? ¿Algunas ideas?

Escuadrón digital
fuente
49
¿Se docker-machineejecuta como root? Acabo de llegar aquí con el mismo problema en Ubuntu y fueron los permisos en el zócalo: sudofuncionó.
SLD
77
Para aquellos en Linux, es posible que deba agregarse al grupo de acopladores .
Batandwa
55
solo corre: sudo docker-compose up
Girish Gupta
Tuve el mismo problema. Necesita reiniciar la ventana acoplable. sudo service docker restarto sudo service docker startlo resolví con esto.
OM Bharatiya
Para aquellos que usan Ubuntu, debe usar sudo y no debe agregar usuarios al grupo de acopladores . Vea los comentarios en la respuesta aceptada: askubuntu.com/questions/477551/…
kas

Respuestas:

89

La máquina Docker está funcionando. Pero necesita exportar algún entorno para conectarse a la máquina Docker. Por defecto, el dockercliente CLI está intentando comunicarse con el demonio utilizando http+unix://var/run/docker.sock(como se muestra en el mensaje de error).

Exporte las variables de entorno correctas utilizando eval $(docker-machine env dev)e intente nuevamente. También puede simplemente ejecutar docker-machine env devpara ver las variables de entorno que exportará. Tenga en cuenta que uno de ellos es DOCKER_HOST, tal como el mensaje de error sugiere que es posible que deba configurarlo.

Andy Shinn
fuente
2
Puede poner ese comando ( eval "$(docker-machine env default)") en su bin / postactivate para asegurarse de que siempre esté actualizado.
Dannid
1
¿Dónde encuentro el archivo bin / postactivate?
Lukas Schulze
O olvidó instalar docker: $ eval $(docker-machine env dev) Command 'docker-machine' not found, but can be installed with: sudo snap install docker
R OMS
226

Solución simple para mí: sudo docker-compose up


ACTUALIZACIÓN 2016-3-14: En algún momento del proceso de instalación de docker (¿o docker-compose?) Hay una sugerencia y un ejemplo para agregar su nombre de usuario al grupo "docker". Esto le permite evitar la necesidad de "sudo" antes de todos los comandos de Docker, de esta manera:

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

Mire cuidadosamente la salida de los comandos de instalación (tanto docker como la segunda instalación para docker-compose) y encontrará el paso necesario. También se documenta aquí: https://subosito.com/posts/docker-tips/

Sudo? ¡No!

¿Estás cansado de escribir sudo docker cada vez que emites un comando? Sí, hay una manera de lidiar con eso. Aunque, naturalmente, Docker requiere un usuario root, podemos proporcionar un grupo equivalente a la raíz para las operaciones de Docker.

Puede crear un grupo llamado docker, luego agregar el usuario deseado a ese grupo. Después de reiniciar el servicio de docker, el usuario no necesitará escribir sudo cada vez que realice operaciones de docker. ¿Cómo se ve en los comandos de un shell? como raíz, aquí tienes:

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

¡Hecho!

ACTUALIZACIÓN 2017-3-9

Las instrucciones de instalación de Docker se han actualizado aquí.

Pasos posteriores a la instalación para Linux

Esta sección contiene procedimientos opcionales para configurar hosts Linux para que funcionen mejor con Docker.

Administrar Docker como usuario no root

El demonio docker se une a un socket Unix en lugar de a un puerto TCP. Por defecto, el socket Unix es propiedad del usuario root y otros usuarios solo pueden acceder a él usando sudo. El docker daemon siempre se ejecuta como usuario root.

Si no desea usar sudo cuando usa el comando docker, cree un grupo Unix llamado docker y agréguele usuarios. Cuando se inicia el dacker de Docker, el grupo de Docker hace que la propiedad del socket de Unix sea leída / editable.

Para crear el grupo de acopladores y agregar su usuario:

# 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

Este comando descarga una imagen de prueba y la ejecuta en un contenedor. Cuando se ejecuta el contenedor, imprime un mensaje informativo y sale.

Alan Thompson
fuente
1
Del mismo modo, por alguna razón, sudo es la única forma de hacerlo funcionar: O: O: O
Jamie Hutber
12
En lugar de cerrar sesión ... puede usar el comando:newgrp docker
Thiago Falcao
Ahh respuesta detallada con subconsulta :-)
Sukumaar
1
Re: "Solución simple para mí: sudo docker-compose up". Cuando trato de que, consigo:sudo: docker-compose: command not found
mblakesley
38

Si comenzó a usar Docker sudo, debe ejecutar docker-compose con sudo Like:sudo docker-compose up

Rohan Seth
fuente
Me funcionó cuando corrí en sudo docker-compose buildlugar de docker-compose build.
anms_pro
26

Por defecto, el demonio sudoDocker siempre se ejecuta como usuario root, por lo tanto, debe anteponer sus comandos Docker.

Si no desea usar sudo cuando usa el comando docker, cree un grupo Unix llamado docker y agréguele usuarios. Cuando se inicia el dacker de Docker, el grupo de Docker hace que la propiedad del socket de Unix sea leída / editable.

Para crear el grupo de acopladores y agregar su usuario:

  1. Crea el grupo de acopladores.

    $ sudo groupadd docker

  2. Agregue su usuario al grupo acoplable.

    $ sudo usermod -aG docker $USER

  3. Cierre sesión y vuelva a iniciarla para que su membresía de grupo sea reevaluada.

  4. Verifique que pueda acoplar comandos sin sudo.

    $ docker run hello-world

Este comando descarga una imagen de prueba y la ejecuta en un contenedor. Cuando se ejecuta el contenedor, imprime un mensaje informativo y sale.

Los pasos descritos anteriormente provienen de la documentación oficial de Docker .

ndequeker
fuente
¿Cómo podemos hacer esto en Windows instalado Docker?
Jeff Cook, el
Además de eso, lo que hice para arreglar docker-compose fue configurar el usuario ejecutándose docker-composecomo el propietario /usr/local/bin/docker-composey luego reiniciar el servicio
Sam
groupse puede actualizar la membresía su - $USERpara guardar el cierre y cierre de sesión
Stuart Cardall
20

Cuando recibes un error :

ERROR: No se pudo conectar con Docker daemon en http + docker: // localhost: ¿se está ejecutando?

La solución sería:

  1. Primero, intente verificar que Docker Service esté en funcionamiento como se esperaba en su máquina remota / local:sudo service docker status

    si no, ejecutar sudo service docker start o sudo systemctl start docker(depende de algunas versiones de Linux, consulte las instrucciones de inicio de Docker ).

  2. Segundo, inicia docker como sudo sudo docker-compose up

avivamg
fuente
16

sudo systemctl start docker - para iniciar el servicio Docker.

sudo docker-compose up después de esto.

Tengo Fedora 26, y tratando de resolver el mismo problema, eventualmente ingresé a Docker Compose en la página de Desarrolladores de Fedora y luego a Docker en la página de Desarrolladores de Fedora , lo que me ayudó.

Probablemente, el servicio de docker considera que la comunidad comienza con el sistema y se ejecuta en segundo plano todo el tiempo, pero para mí no fue tan obvio, y esa es la razón por la que puedo pensar por qué no hay una respuesta popular como esta.

En la página de Desarrolladores de Fedora hay instrucciones sobre cómo habilitar Docker para comenzar con el sistema:

sudo systemctl enable docker

Aleksei Alefirov
fuente
Reemplace systemctlcon launchctlsi está ejecutando en Mac.
Rohit Swami
6

Si está en Linux, es posible que no lo haya docker-machineinstalado, ya que solo se instala de manera predeterminada en computadoras Windows y Mac.

Si es así, deberá dirigirse a: https://docs.docker.com/machine/install-machine/ para encontrar instrucciones sobre cómo instalarlo en su versión de Linux.

Después de la instalación, vuelva a intentar ejecutar docker-compose upantes de intentar cualquier cosa mencionada anteriormente.

Espero que esto ayude a alguien. Esto funcionó para mi instalación de devilbox en Fedora 25.

specialk1st
fuente
5

Además de agregar usuarios al grupo acoplable, para evitar escribir sudorepetidamente, también puede crear un alias para dockercomandos como este:

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

Si está utilizando docker-machine, debe activar el entorno utilizando la variable env . en caso de que no esté usando docker-machine, ejecute sus comandos con sudo

Md Ch
fuente
3

¿Alguien revisó el registro?

En mi caso, el mensaje de error /var/log/upstart/docker.logfue:

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" 

Vale la pena mencionar que tenía vpn activado, así que: $ sudo service openvpn stop $ sudo service docker restart $ docker-compose up|start $ sudo service openvpn start fue la solución.

Sławomir Lenart
fuente
3

La respuesta de @srfrnk funciona para mí.

En mi situación, tuve el siguiente archivo docker-compose.yml:

  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-runtimepropietario y grupo: es rootel propietario de los otros archivos: mi usuario. Cuando intenté construirnginx

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

He añadido ./docker-runtimea .dockerignorey se resuelve mi problema.

Dima Storozhuk
fuente
3

mientras corría docker-compose pull- me estaba apareciendo debajo del error

ERROR: no se pudo conectar con Docker daemon en http + docker: // localhost

esta corriendo?

solución

sudo service docker start 

problema resuelto

kumar
fuente
2

He tenido los mismos síntomas.

Solo difiere de que sucedió solo durante el docker-compose build docker pstrabajo. Pasó con la versión 2.x, así como 3.x. dockerServicio reiniciado , luego la máquina ... Incluso reinstalado docker+ docker-compose.

Intenté todo pero nada ayudó.

Finalmente intenté construir el Dockerfile "manualmente" usando docker build.

Aparentemente tuve un problema de permiso en un archivo / carpeta dentro del Dockercontexto. Intentaba leer el contexto al iniciar la compilación y falló con un mensaje de error adecuado. Sin embargo, este mensaje de error no se propagó al docker-composeque solo se muestraCouldn't connect to Docker daemon at http+unix://var/run/docker.sock - is it running?

Habiendo descubierto que la solución era simplemente agregar el archivo / carpeta al .dockerignorearchivo ya que no era necesario para la compilación. Otra solución podría haber sido chowno chmod.

De todos modos, tal vez esto podría ayudar a alguien a encontrarse con el mismo problema que realmente no tiene nada que ver con dockerel mensaje de error engañoso que se muestra.

srfrnk
fuente
Tuve el mismo problema: permisos de archivo en un volumen montado. En mi caso, tenía un certificado SSL propiedad de root que se había puesto en un volumen Docker. chown/ lo chmodarreglé. Mensaje de error terrible pero están trabajando en ello. Ver github.com/docker/compose/issues/5318
bcattle el
2

$ sudo docker-componer

Seguí los pasos tal como están en la respuesta anterior para agregar $ USER al docker grupal. no quería agregar un nuevo acoplador de grupo porque en mi instalación de acoplador se creó automáticamente un grupo llamado acoplador.

Docker CE está instalado y en ejecución. Se crea el grupo de acopladores pero no se agregan usuarios. Debe usar sudo para ejecutar los comandos de Docker. Continúe con Linux postinstall para permitir que usuarios sin privilegios ejecuten comandos Docker y para otros pasos de configuración opcionales.

pero usar docker-compose up tampoco funcionó. Dio el mismo error anterior. Entonces, en mi caso (Ubuntu 18.10) sudo docker-compose arregló el problema.

ps: @Tiw gracias por el consejo.

Nayananga Muhandiram
fuente
1
Tal vez sea mejor poner la solución primero, y los que explican debajo. También puede utilizar esos botones en el editor para formatear mejor su respuesta.
Tiw
2

Sé que es una tontería, pero en mi caso lo intenté sudoy funcionó a las mil maravillas.

en su caso, solo intente: $ sudo docker-compose up

Desmovilizador
fuente
1

prueba esto:

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

TBhavnani
fuente
1

He resuelto el problema siguiendo los siguientes pasos.

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

ahora docker-compose está funcionando

KARTHIKEYAN.A
fuente
0

Para mí, comencé a actualizar Docker y cancelé a mitad de camino. No noté que Docker no estaba funcionando (si lo estaba, hay un icono en la barra de navegación superior de mi Macbook, por la batería restante, el tiempo, etc.) Una vez que lo inicié y terminé la actualización, ¡ docker-compose upfuncioné nuevamente!

Rock Lee
fuente
0

Mi configuración tiene dos casos para este error:

  • __pycache__ los archivos creados por el usuario root después de ejecutar las pruebas de integración dentro del contenedor son inaccesibles para docker (le dice el problema original) y docker-compose (le informa ambiguamente sobre el host docker);
  • microk8s bloqueé mi puerto hasta que lo detuve.
simno
fuente
0

Intenta ejecutar dockerdo, sudo dockerdsi es necesario, primero para iniciar daemon. Si comienzas dockerdcon sudotal vez quieras correr docker-compose upconsudo también. de lo contrario está bien.

Solución de trabajo de https://github.com/docker/compose/issues/4181

Gathua Kiragu
fuente
0

Cerrar sesión y luego volver a ayudarme. En mi caso fue una instalación nueva, creé un nuevo usuario, un nuevo grupo y luego agregué el usuario al grupo de acopladores.

salida salida

luego ssh en el servidor nuevamente

Swelan Auguste
fuente
0

Lo siguiente funcionó para mí, no estoy seguro de qué parte funcionó:

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
fuente