You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker-in-Docker环境下pgloader连接数据库的正确主机名是什么?

在Docker-in-Docker环境中使用pgloader连接MySQL/PostgreSQL的主机名问题

你在Docker-in-Docker(docker:dind)环境中运行MySQL和PostgreSQL容器,使用pgloader时遇到连接错误,核心问题是连接串中的主机名错误,正确设置如下:

正确的主机名选择

你已将MySQL和PostgreSQL容器加入自定义网络my-network,在Docker自定义网络中,容器可通过容器名或启动时指定的hostname直接互通,因此pgloader连接串里的主机名应替换为:

  • 连接MySQL:使用mysql(启动容器时指定的--hostname mysql)或mysql-db(容器名)
  • 连接PostgreSQL:使用postgres(启动容器时指定的--hostname postgres)或postgres-db(容器名)

修正后的pgloader命令

pgloader --with "batch concurrency = 1" mysql://my_user:my_password@mysql/my_db postgresql://my_user:my_password@postgres/my_db

为什么之前的方式无效

  • localhost:在dind容器内部,localhost指向的是dind容器本身,而非其中运行的MySQL/PostgreSQL容器,因此无法访问。
  • 通过ip route获取的IP:该IP是dind容器宿主机的网关IP,并非MySQL/PostgreSQL容器在自定义网络中的IP,自然无法连通。

另外你原命令中的$lch是错误写法,直接替换为上述主机名即可。

内容的提问来源于stack exchange,提问作者mefiu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 00:12:37