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:
-
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 elsudo service docker status
sudo systemctl start docker
osudo systemctl start docker
(depende de algunas versiones de Linux). -
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:
-
Crea el grupo de acopladores.
$ sudo groupadd docker
-
Agregue su usuario al grupo de acopladores.
$ sudo usermod -aG docker $USER
-
Cierre sesión y vuelva a iniciarla para que su membresía de grupo sea reevaluada.
-
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.