如何配置Laradock/Docker使用本地Putty搭建的VPN隧道访问亚马逊远端数据库
问题描述
我当前使用Laradock运行网站的开发版本,该站点需要通过VPN隧道访问亚马逊平台上的数据库。
我已经通过Putty在本地PC上搭建完成VPN隧道,将本地1234端口转发至远程数据库对应端口,相关运行日志如下:
2021-07-05 07:33:12 Local port 1234 forwarding to mydb.eu-west-1.rds.amazonaws.com:1234
请问我应当如何配置Laradock或Docker,使其可以正常使用本地机器上已经搭建好的隧道?或者有没有其他方案可以搭建Docker容器能够使用的隧道?
编辑补充:问题已解决,可查看下方回答内容
解决方案
方案1:直接使用本地已搭建的隧道
这是改造成本最低的方案,只需要调整Docker和Laradock的少量配置即可:
前置检查
首先确认Putty的隧道配置允许外部访问:
- 打开Putty的隧道配置页,勾选「Local ports accept connections from other hosts」,避免隧道只监听127.0.0.1导致Docker容器无法访问。
如果你使用Docker Desktop(Mac/Windows系统)
Docker Desktop默认内置了指向宿主机的域名,直接修改Laradock项目根目录下的.env文件:
- 找到数据库相关的HOST配置项,将值改为
host.docker.internal - 数据库端口保持
1234即可,无需其他修改,重启容器后就能正常连接。
如果你使用Linux系统的原生Docker
Linux环境默认没有内置宿主机域名,二选一即可:
方法A:配置host映射
- 打开Laradock的
docker-compose.yml,找到你运行项目的服务(一般是php-fpm或者workspace),新增extra_hosts配置:
services: php-fpm: # 保留原有其他配置,新增下方内容 extra_hosts: - "host.docker.internal:host-gateway"
- 同Docker Desktop配置,将数据库HOST改为
host.docker.internal,端口填1234,重启容器即可。
方法B:直接使用宿主机网桥IP
- 在宿主机执行
ip addr show docker0,获取docker0网桥的IP,一般默认是172.17.0.1 - 将数据库HOST改为该IP,端口填
1234 - 确认宿主机防火墙放开Docker网段对1234端口的访问权限即可。
方案2:在Docker容器内独立搭建隧道
如果不想依赖宿主机的Putty隧道,可以直接在Laradock内部实现隧道自动维护:
- 在
laradock/workspace/Dockerfile中添加autossh安装命令:
RUN apt-get update && apt-get install -y autossh
- 将你的SSH跳板机私钥挂载到workspace容器内,或者打包到镜像中
- 在workspace的启动脚本中添加自动建隧道命令:
autossh -M 0 -N -L 0.0.0.0:1234:mydb.eu-west-1.rds.amazonaws.com:1234 你的跳板机用户名@跳板机地址 -p 跳板机SSH端口 -i /路径/到/私钥文件 -o StrictHostKeyChecking=no
- 项目内数据库HOST填
127.0.0.1,端口填1234即可,autossh会自动维护隧道连接稳定性。
注意事项
以上方案仅适用于开发环境,生产环境建议使用云厂商VPC对等连接、专线等正规方案访问RDS,避免隧道不稳定导致业务故障。
内容的提问来源于stack exchange,提问作者vogomatix
相关产品推荐
相关产品推荐

