我通过-H=ssh://user@192.168.0.x
在本地网络上的另一台物理计算机上远程运行docker-compose服务。
我正在使用docker-compose公开端口:
ports:
- 8001:8001
但是,当我启动服务时,端口8001没有暴露给我的本地主机。我可以进入运行该容器的机器,端口8001确实在那儿监听。
我如何指示docker-compose将此端口从运行容器的远程计算机隧道传输到我的本地docker客户端?
答案 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的映像本地源代码树。)