Docker容器如何访问本地已端口转发的远程数据库?
解决Docker容器访问本地端口转发的问题
方法1:用宿主机专属地址替代localhost
容器里的localhost指向的是容器自身的回环地址,不是你的本地机器。Docker 18.03及以上版本直接支持host.docker.internal这个地址,在容器里把数据库连接地址换成host.docker.internal:转发端口,就能访问到本地的端口转发服务。Linux、macOS、Windows系统都能直接用这个地址。
方法2:修改端口转发的绑定范围
默认的端口转发通常只绑定127.0.0.1,也就是只有本地机器能访问,哪怕用--network host启动的容器也无法触及。把转发命令改成绑定0.0.0.0即可:
比如原来的SSH转发命令是ssh -L 5432:remote-db:5432 user@remote-server,修改为ssh -L 0.0.0.0:5432:remote-db:5432 user@remote-server。之后用--network host启动的容器,直接用localhost:转发端口就能连上数据库。
方法3:自定义Docker网络加路由(备选)
如果不想用host网络,也可以通过自定义网络加路由实现,但步骤相对繁琐:
- 创建自定义网络:
docker network create --subnet=172.18.0.0/16 my-db-net - 启动容器时加入该网络:
docker run --network my-db-net [你的其他启动参数] 镜像名 - 在容器内添加路由指向宿主机的局域网IP(比如你的电脑IP是192.168.1.10):
ip route add 127.0.0.1/32 via 192.168.1.10
这个方法优先级最低,能用前两种就优先选前两种。
内容的提问来源于stack exchange,提问作者Labyrinthian
相关产品推荐
相关产品推荐

