docker port可以转发到主机容器上的unix文件套接字吗?

时间:2014-07-25 12:57:56

标签: docker unix-socket

运行以下命令失败:

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

我的端口转发语法有问题,或者这样的配置不可能?

2 个答案:

答案 0 :(得分:25)

Docker的-p语法不会占用unix套接字:

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

一种解决方案是:

  • 在没有任何-p规范的情况下运行您的容器,我们将其命名为"cont1"--name cont1
  • 运行第二个容器:
    • Bind mounts 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

答案 1 :(得分:5)

接受的答案部分正确,但是因为你只能链接目录,这意味着你需要链接套接字的目录而不是套接字本身。

当我想连接一个postgres套接字时,以下为我做了。

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

这样做是将postgres套接字文件链接到您的主机系统。