我在远程VPS上的码头组成网络中运行了容器。我希望能够从本地主机访问在其中一个容器中运行的数据库。
如果容器app和db在VPS上的容器网络中,我想从机器的localhost:5432中访问db:5432。Kubernetes的CLI允许使用kubectl port-forward <service-name> 5432:5432。
在现有的unix命令和Docker的API中是否存在实现此效果的现有解决方案?我在互联网上的搜索并没有产生任何CLI来做这件事。
干杯。
编辑:我已经接受了阿里·头的回答,但是,如果能看到一个不需要重新启动容器来重新配置其端口以将它们公开到主机上的解决方案,那就太好了。
编辑2:我发现了一种聪明的方法,可以在Docker网络中使用与https://stackoverflow.com/a/42071577/12406113切线相关的套接字转发流量。但是,这是公开的端口,而不是创建隧道,例如在SSH解决方案中。
发布于 2020-11-01 09:58:44
假设您可以访问正在运行容器的目标机器,您可以通过两个步骤实现这一点:
。
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:端口对),并通过ssh隧道将其连接转发到远程系统的127.0.0.1:5432 (第二个ip:端口对)(用<VPS_IP>演示)。有关更多信息,请参见this answer。
请注意,这个ssh连接是持久的,直到您的网络保持连接。如果要关闭此连接,请执行ps aux | grep ssh查找ssh转发过程的PID,然后使用sudo kill -9 $PID关闭它。
但是,如果您没有安全问题,这与直接连接到VPS_IP:5432的情况没有什么不同。
发布于 2020-11-01 06:31:34
您可以只使用端口部分,其中可以指定主机端口和容器端口来转发请求https://docs.docker.com/compose/networking/。
https://stackoverflow.com/questions/64629210
复制相似问题