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

Ed *_*van 22 unix-socket docker

运行以下命令失败:

sudo docker run -p unix:///tmp/file.sock:44444 -d image_name
Run Code Online (Sandbox Code Playgroud)

我的端口转发语法有问题还是这样的配置不可能?

ice*_*ime 27

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

-p=[]      : Publish a container?s port to the host (format:
             ip:hostPort:containerPort | ip::containerPort |
             hostPort:containerPort)
Run Code Online (Sandbox Code Playgroud)

一种解决方案是:

  • 没有任何-p规范运行您的容器,我们将其命名"cont1"(--name cont1)
  • 运行第二个容器:
    • 绑定安装 unix socket(-v /tmp/file.sock:/tmp/file.sock)以使其可以从容器中访问
    • 链接到第一个容器(--link cont1:cont1)以便能够连接到它
    • 运行一个工具,例如socat将流量从unix套接字路由到"cont1:4444"端点

我不是社交专家,但您需要的地址规范应如下所示: UNIX-LISTEN:/tmp/file.sock,fork,reuseaddr TCP4:cont1:4444


Vas*_*lka 6

但是,可以接受的答案在某种程度上是正确的,因为您只能链接目录,这意味着您需要链接套接字的目录而不是套接字本身。

当我想连接一个postgres套接字时,以下对我有用。

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

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

  • 还不支持 mac 吗?https://github.com/docker/for-mac/issues/483 (2认同)