一尘不染

码头工人端口可以转发到主机容器上的Unix文件套接字吗?

docker

运行以下命令失败:

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

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


阅读 223

收藏
2020-06-17

共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),以便可以从容器内部访问它
    • 链接到第一个容器(--link cont1:cont1),以便能够连接到它
    • 运行诸如socat将流量从unix套接字路由到"cont1:4444"端点的工具

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

2020-06-17