我有一些容器在远程VPS上的docker-compose网络中运行。我希望能够从本地主机访问在这些容器之一中运行的数据库。
例如,如果容器app
和db
在VPS上的容器网络中,我想从我的计算机的 {{1 }}。 Kubernetes的CLI可以通过db:5432
进行此操作。
在现有的unix命令和Docker的API中是否存在任何实现此效果的解决方案?我在Internet上搜索并没有产生任何CLI来完成此操作。
干杯。
编辑:我已经接受了Ali Tou的回答,但是,很高兴看到一个不需要重启容器即可重新配置其端口以将其暴露给主机的解决方案。 / p>
编辑2:我在与切向相关的帖子https://stackoverflow.com/a/42071577/12406113中找到了一种使用socat在Docker网络中转发流量的聪明方法。但是,这是在SSH解决方案中公开公开端口而不是创建隧道。
答案 0 :(得分:1)
假设您具有运行容器的目标计算机的SSH访问权限,则可以通过两个步骤来实现:
ports:
- 127.0.0.1:5432:5432
ssh -f -N -L 127.0.0.1:5432:127.0.0.1:5432 <VPS_IP>
上面的命令似乎令人困惑,但是它要求SSH侦听客户端系统上的127.0.0.1:5432
(第一个ip:port对),并通过ssh隧道将其连接转发到127.0.0.1:5432
(第二个) (用<VPS_IP>
演示的远程系统的ip:port对)。有关更多信息,请参见this answer。
请注意,此ssh连接将一直保持,直到您的网络保持连接状态。如果要关闭此连接,请执行ps aux | grep ssh
查找ssh转发过程的PID,然后使用sudo kill -9 $PID
将其终止。
P.S。但是,如果您没有安全方面的考虑,直接连接到VPS_IP:5432
的情况也没什么不同。
答案 1 :(得分:0)
您可以仅使用端口部分,在其中可以指定主机端口和容器端口来转发请求https://docs.docker.com/compose/networking/