不提供私钥给第三方客户端,如何使用远程 Docker 服务
场景
服务器上容器跑着服务(MySQL 或 Redis),使用桥接网络,且不对公网暴露端口。这其实跟服务器本地起服务是一样的,只不过多了一层桥接网络。解决了桥接网络问题,关键就在于如何在本地访问服务器本地的服务(或端口)。
问题
为什么不提供私钥?
先解决这层桥接网络。
直接使用容器 IP + 端口号是可以访问,每次都要先查 IP 不太方便。
容器对服务器本地(127.0.0.0/8
)做端口映射,如 127.0.0.1:16379:6379
,这样就相当于 Redis 服务运行在服务器本地,端口号 16379
。
SSH 端口转发。
在本机客户端像访问本地服务一样访问服务器本地的服务3。
# if no port mapping, 192.168.48.4 is container's IP
# ssh -L 16379:192.168.48.4:6379 user@remote-host
ssh -L 16379:127.0.0.1:16379 user@remote-host # if has port mapping
# ssh -L 127.0.0.1:16379:127.0.0.1:16379 user@remote-host # only localhost
redis-cli -h 127.0.0.1 -p 16379 # on local machine
References
- https://kany.me/2019/10/10/compile-redis-desktop-manager/.
- https://blog.meow.page/2018/11/12/build-rdm-for-mac-from-source/.
- https://gist.github.com/fee0ea5b9bdf686670f81f66c3bfec4a.