tutorial hub espaƱol compose docker docker-compose

hub - No se puede conectar a Docker desde docker-compose



docker compose tutorial (18)

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?


¿Alguien revisó el registro?

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

sudo service docker start

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.


Además de agregar usuarios al grupo de acopladores, para evitar escribir sudo repetidamente, también puede crear un alias para los comandos de docker manera:

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"


Cuando recibes un error:

ERROR: No se pudo conectar al demonio Docker 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

    en caso sudo systemctl start docker : ejecute el sudo service docker status sudo systemctl start docker o sudo systemctl start docker (depende de algunas versiones de Linux).

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


De forma predeterminada, el dacker de Docker siempre se ejecuta como usuario root, por lo tanto, debe anteponer sudo a sus comandos de 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 Unix sea leída / editable.

Para crear el grupo acoplable y agregar su usuario:

  1. Crea el grupo de acopladores.

    $ sudo groupadd docker

  2. Agregue su usuario al grupo de acopladores.

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


He tenido los mismos síntomas.

Solo di que sucedió solo durante la docker-compose build docker ps docker-compose build docker ps funcionó. Sucedió con la versión 2.x y 3.x Reinicié el servicio de docker , luego la máquina ... Incluso reinstalé 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 contexto de Docker . 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ó a docker-compose que solo muestra Couldn''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 archivo .dockerignore ya que no era necesario para la compilación. Otra solución podría haber sido chown o chmod it.

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


Intente ejecutar dockerd o sudo dockerd si es necesario primero para iniciar daemon. Si inicia dockerd con sudo también puede ejecutar docker-compose up con sudo . de lo contrario está bien.

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


La máquina Docker está funcionando. Pero necesita exportar algún entorno para conectarse a la máquina Docker. De manera predeterminada, el cliente de la CLI de docker 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 ejecutar docker-machine env dev para 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.


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-runtime propietario y grupo - es root cuando el otro propietario de los archivos - mi usuario. Cuando intenté construir nginx

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

./docker-runtime a .dockerignore y se resolvió mi problema.


Mi configuración tiene dos casos para este error:

  • __pycache__ archivos __pycache__ creados por el usuario raíz 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.

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 up funcionó nuevamente.


Si está en Linux, es posible que no tenga instalada una docker-machine 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 up antes de intentar cualquier cosa mencionada anteriormente.

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


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


Si inició docker usando sudo , entonces debe ejecutar docker-compose con sudo Like: sudo docker-compose up


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 está documentado 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 Unix sea leída / editable.

Para crear el grupo acoplable 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.


mientras ejecutaba docker-compose pull - recibía el siguiente error

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

esta corriendo?

solución

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

problema resuelto


prueba esto:

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


sudo systemctl start docker : para iniciar el servicio Docker.

sudo docker-compose up después de eso.

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


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