在Python容器中使用mongoimport连接同网络Mongo容器失败求助
问题描述
我正尝试在运行Python程序的容器中,使用mongoimport将容器内的文件上传至同一Docker网络中的另一个MongoDB容器。当前使用的命令如下:
mongoimport --host mongo --port 27017 --db vulns --collection qualys-kb --file kb.json --jsonArray
上述命令试图连接名为mongo的容器,该容器与执行命令的容器处于同一Docker网络,且mongo容器运行着MongoDB,可通过标准27017端口访问。但执行命令时出现如下错误:
2023-09-21T12:39:09.184+0000 error connecting to host: failed to connect to mongodb://mongo:27017/: server selection error: server selection timeout, current topology: { Type: Single, Servers: [{ Addr: mongo:27017, Type: Unknown, Last error: connection() error occurred during connection handshake: dial tcp: lookup mongo on 192.168.1.1:53: no such host }, ] }
希望能通过容器名连接Mongo容器完成导入,或提供其他可行方法。
解决方案
1. 确认容器在同一自定义Docker网络
Docker默认bridge网络不支持容器名DNS解析,必须使用自定义网络:
- 检查两个容器的网络归属:
docker inspect mongo | grep -A5 "Networks" docker inspect <python-container-name> | grep -A5 "Networks" - 若不在同一自定义网络,创建并加入:
docker network create mongo-network # 重启Mongo容器加入网络(需先停止原有容器) docker stop mongo && docker rm mongo docker run --name mongo --network mongo-network -d mongo # 重启Python容器加入同一网络 docker stop <python-container-name> && docker rm <python-container-name> docker run --name <python-container-name> --network mongo-network -d <your-python-image>
2. 验证容器间网络连通性
进入Python容器内测试解析和端口:
docker exec -it <python-container-name> bash # 解析mongo容器名 nslookup mongo # 测试27017端口连通 telnet mongo 27017
如果nslookup失败,说明网络配置有误;如果telnet不通,检查Mongo容器是否正常运行、端口是否未被防火墙拦截。
3. 临时方案:使用Mongo容器IP
若容器名解析暂时无法修复,直接用Mongo容器的IP地址:
- 获取IP:
docker inspect mongo | grep -oP '"IPAddress": "\K[^"]+' - 修改
mongoimport命令:mongoimport --host <mongo-ip> --port 27017 --db vulns --collection qualys-kb --file kb.json --jsonArray
4. 检查MongoDB绑定配置
确保MongoDB监听所有IP,而非仅localhost:
- 查看Mongo容器的启动参数,确认没有设置
--bind_ip 127.0.0.1;若使用配置文件,需将bindIp设为0.0.0.0。
内容的提问来源于stack exchange,提问作者AsapHogFtw
相关产品推荐
相关产品推荐

