docker端口可以转发到主机容器上的unix文件套接字吗?
运行以下命令失败:
sudo docker run -p unix:///tmp/file.sock:44444 -d image_name
我的端口转发语法有问题,或者像这样的configuration不可能?
Docker的-p
语法不会使用unix套接字:
-p=[] : Publish a container᾿s port to the host (format: ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort)
一个解决scheme是:
- 运行没有任何
-p
规范的容器,我们将其命名为"cont1"
(–name--name cont1
) - 运行另一个容器:
- 绑定安装 unix套接字(
-v /tmp/file.sock:/tmp/file.sock
)以使其可以从容器内访问 - 链接到第一个容器(
--link cont1:cont1
)以便能够连接到它 - 运行
socat
等工具,将stream量从unix套接字路由到"cont1:4444"
端点
- 绑定安装 unix套接字(
我不是一个社会专家,但您需要的地址规范应该看起来像这样: UNIX-LISTEN:/tmp/file.sock,fork,reuseaddr TCP4:cont1:4444
接受的答案是部分正确的,但是因为你只能链接目录,这意味着你需要链接套接字而不是套接字本身的目录。
下面是我想要连接postgres套接字的时候做的。
docker run -p 5432:5432 -v /run/postgresql:/run/postgresql -d --name postgres postgres
这样做是将postgres套接字文件链接到您的主机系统。