Problema docker en nuevo MacBook

desu

Necesito ayuda con Docker, tengo el MacBook nuevo y algo falla.

Tengo el docker corriendo en root.

ls -l /var/run/docker.sock

pone root.

Quiero hacer un List de los containers, super fácil: https://docs.docker.com/engine/api/sdk/examples/#list-and-manage-containers

NO funciona.

failed to load listeners: can't create unix socket /var/run/docker.sock: device or resource busy

En el docker-compose le he metido esto:

    
volumes: - /var/run/docker.sock:/var/run/docker.sock privileged: true security_opt: - apparmor=unconfined

Objetivo, usar la sdk de docker para conectarme al socket y hacer List de los contenedores. Falla.

Pregunto a ver si os ha pasado xq usando google y stackoverflow nadie tiene este problema. Y yo en el pasado he usado la CLI de docker sin problema para hacer cosas asi... Me acuerdo que lo hice hace años y no me paso nada...

Zh3RoX
  1. Verifica si Docker ya está corriendo
    Es posible que Docker ya esté corriendo y por eso el socket esté en uso. Puedes verificarlo con:

sh
sudo systemctl status docker
Si Docker está corriendo, intenta reiniciarlo:

sh
sudo systemctl restart docker

  1. Detén Docker y elimina el archivo del socket
    Si Docker no está corriendo o si necesitas asegurarte de que no hay conflictos, puedes detener Docker y eliminar el archivo del socket:

sh
sudo systemctl stop docker
sudo rm /var/run/docker.sock
sudo systemctl start docker

  1. Verifica los permisos del archivo del socket
    Asegúrate de que los permisos del archivo del socket sean correctos. El archivo del socket debe ser accesible por el usuario que está ejecutando Docker. Puedes ajustar los permisos con:

sh
sudo chmod 666 /var/run/docker.sock

  1. Verifica procesos en uso
    A veces, otros procesos pueden estar usando el socket. Puedes verificar qué proceso está usando el socket con:

sh
sudo lsof /var/run/docker.sock
Si encuentras un proceso que está utilizando el socket de manera inapropiada, puedes matarlo:

sh
sudo kill -9 <PID>
Reemplaza <PID> con el ID del proceso que está usando el socket.

  1. Reinicia el sistema
    Si los pasos anteriores no solucionan el problema, a veces un reinicio del sistema puede ayudar a liberar recursos bloqueados.

  2. Reinstala Docker
    Como último recurso, si nada de lo anterior funciona, considera reinstalar Docker:

sh
sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

desu

Si me conecto al container y hago una petición HTTP en lugar de usar la SDK de GO si que funciona

Y a ver, chatGPT ya estoy usando, llevo +2h arreglando esto y es algo que tiene que ver con el MacBook, tiener el socket root y la SDK de GO porque por HTTP funciona...

Si nadie tiene ni idea lo hare con peticiones http guarras y paseando a mano el resultado... que le jodan a la SDK

https://github.com/moby/moby/issues/48180

He abierto el bug en docker.

desu

Este es el codigo que esta mal en la SDK de go:

gid, err := lookupGID(socketGroup)
		if err != nil {
			if socketGroup != "" {
				if socketGroup != defaultSocketGroup {
					return nil, err
				}
				log.G(context.TODO()).Warnf("could not change group %s to %s: %v", addr, defaultSocketGroup, err)
			}
			gid = os.Getgid()
		}
		l, err := sockets.NewUnixSocket(addr, gid)
		if err != nil {
			return nil, errors.Wrapf(err, "can't create unix socket %s", addr)
		}
		if _, err := homedir.StickRuntimeDirContents([]string{addr}); err != nil {
			// StickRuntimeDirContents returns nil error if XDG_RUNTIME_DIR is just unset
			log.G(context.TODO()).WithError(err).Warnf("cannot set sticky bit on socket %s under XDG_RUNTIME_DIR", addr)
		}
		ls = append(ls, l)

SI os fijáis trata de crear SIEMPRE un socket para el docker, pero si ya lo tengo... para que cojones vas a crear uno nuevo? jaja

Esta claro q algo no estoy entendiendo bien y es raro que tenga este error con algo tan trivial... estoy seguro que es por el Mac nuevo

desu

Lo hemos probado varios y el problema es usar la
Docker image en el build del contenedor.

Que lo resuelva otro. Conclusion. Ya lo arreglarán los desarrolladores de docker. Por suerte como es en mac no afecta a los servers pero sigue siendo una imagen arm…

Usuarios habituales

  • desu
  • Zh3RoX