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
相关产品推荐
相关产品推荐

