Может ли порт докеров перенаправляться в unix файл на контейнер-хост?
Выполняется следующая команда:
sudo docker run -p unix:///tmp/file.sock:44444 -d image_name
Что-то не так с моим синтаксисом переадресации порта или такая конфигурация невозможна?
Ответ 1
Синтаксис Docker -p не будет принимать unix-сокет:
-p=[] : Publish a container᾿s port to the host (format:
ip:hostPort:containerPort | ip::containerPort |
hostPort:containerPort)
Одно из решений:
Запустите свой контейнер без спецификации -p, мы назовем его "cont1" (--name cont1)
Запустите второй контейнер, который:
Связывает монтирует сокет unix (-v /tmp/file.sock:/tmp/file.sock), чтобы он был доступен из контейнера
Links в первый контейнер (--link cont1:cont1), чтобы иметь возможность подключиться к нему
Запускает такой инструмент, как socat для маршрутизации трафика из Unix-сокета в конечную точку "cont1:4444"
Я не эксперт по софту, но необходимая вам спецификация адреса должна выглядеть так: UNIX-LISTEN:/tmp/file.sock,fork,reuseaddr TCP4:cont1:4444
Ответ 2
Принятый ответ частично корректен, поскольку вы можете связывать только каталоги, а это значит, что вам нужно связать каталог сокета вместо самого сокета.
Следующее сделало это для меня, когда я хотел подключить сокет postgres.
docker run -p 5432:5432 -v /run/postgresql:/run/postgresql -d --name postgres postgres
Что это значит, ссылка на файл сокета postgres на вашу хост-систему.