run library hub docker unix-socket

library - docker search



¿Puede el puerto docker remitir a un socket de archivo unix en el contenedor del host? (2)

La ejecución del siguiente comando falla:

sudo docker run -p unix:///tmp/file.sock:44444 -d image_name

¿Hay algún problema con mi sintaxis de reenvío de puertos o no es posible una configuración como esta?


La sintaxis de Docker''s -p no tomará un socket de Unix:

-p=[] : Publish a container᾿s port to the host (format: ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort)

Una solución sería:

  • Ejecute su contenedor sin ninguna especificación -p , lo "cont1" ( --name cont1 )
  • Ejecutar un segundo contenedor que:
    • Bind monta el socket Unix ( -v /tmp/file.sock:/tmp/file.sock ) para que sea accesible desde dentro del contenedor
    • Links al primer contenedor ( --link cont1:cont1 ) para poder conectarse a él
    • Ejecuta una herramienta como socat para enrutar el tráfico desde el socket Unix al punto final "cont1:4444"

No soy un experto en socat, pero la especificación de la dirección que necesitará debe tener el siguiente aspecto: UNIX-LISTEN:/tmp/file.sock,fork,reuseaddr TCP4:cont1:4444


Sin embargo, la respuesta aceptada es parcialmente correcta, ya que solo puede vincular directorios, lo que significa que debe vincular el directorio del socket en lugar del propio socket.

Lo siguiente lo hice por mí cuando quise conectar un socket postgres.

docker run -p 5432:5432 -v /run/postgresql:/run/postgresql -d --name postgres postgres

Lo que esto hace es vincular el archivo socket postgres a su sistema host.