docker-compose公开远程容器上的端口

时间:2020-04-08 21:24:18

标签: docker docker-compose

我通过-H=ssh://user@192.168.0.x在本地网络上的另一台物理计算机上远程运行docker-compose服务。

我正在使用docker-compose公开端口:

    ports:
      - 8001:8001

但是,当我启动服务时,端口8001没有暴露给我的本地主机。我可以进入运行该容器的机器,端口8001确实在那儿监听。

我如何指示docker-compose将此端口从运行容器的远程计算机隧道传输到我的本地docker客户端?

1 个答案:

答案 0 :(得分:1)

Docker无法执行此操作。但是从ssh客户端的角度来看,该容器与在远程主机上运行的任何其他程序没有什么不同,您可以使用ssh -L选项将本地端口转发到远程系统。

# Tell ssh to forward local port 8001 to remote port 8001
ssh -L 8001:localhost:8001 user@192.168.0.x \
  # Incidentally the remote port happens to be via a Docker container
  docker run -p 127.0.0.1:8001:8001 ...

无论何时设置DOCKER_HOST或使用docker -H选项,您都在向远程Docker守护程序提供指令,该守护程序相对于其自身进行解释。 docker -H ... -v ...在与Docker守护程序相同的系统上将目录装载到容器中; docker -H ... -p ...在与Docker守护程序相同的系统上发布端口。 Docker在执行此操作时无法以某种方式考虑本地系统的内容或网络堆栈。

(一个例外是docker -H ... build,它实际上创建了本地目录的tar文件,并通过网络将其发送以用作构建上下文,因此您可以让远程Docker守护程序构建a的映像本地源代码树。)