我在db1
上运行cluster1
,在db2
上运行cluster2
。它们无法从外部访问,因此要在开发/调试时连接到db,我使用端口转发。
您一次只能将一个群集设置为当前/默认上下文,因此您一次只能移植一个数据库。因此,我不再从本地计算机上一次连接到一个集群,而是启动了两个指向不同集群的docker容器,因此我可以端口转发两个数据库连接,然后将容器端口映射到另一个主机端口,我最终可以通过客户端访问数据库。
$ docker run -d --name cluster1 -p 3306:3306 IMAGE
$ docker run -d --name cluster2 -p 3307:3306 IMAGE
我正在每个容器中
$ kubectl port-forward db-0 3306
在主机上,我尝试连接到localhost
和端口号3306-3307。我得到了:
Server not running on the provided host and port.
我也没有尝试将-p 3306:3306
与上面的docker run
命令一起使用,而是尝试了--expose 3306
,然后使用通过docker inspect
和端口3306获得的容器IP进行连接,但是那也不起作用。
我有什么想念的吗?我很想知道是否还有其他方法可以归档我要执行的操作。谢谢。
答案 0 :(得分:0)
正如OP在评论中提到的那样,我的建议行得通,因此我决定将其发布为答案,并附有完整的说明。
kubectl默认情况下绑定到本地接口,因此只能使用localhost ip(127.0.0.1)进行访问。
$ kubectl port-forward <podname> 8080:8080 &
Forwarding from 127.0.0.1:8080 -> 8080
$ ss -lnt | grep 8080
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 127.0.0.1:8080 *:*
要使其能够从容器外部访问,您需要使用kubectl port-forward --address 0.0.0.0
。这将绑定到所有接口。
$ kubectl port-forward <podname> 8080:8080 --address 0.0.0.0 &
Forwarding from 0.0.0.0:8080 -> 8080
$ ss -lnt | grep 8080
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:8080 *:*