无法从Python容器连接自定义构建的MongoDB Docker容器问题求助
MongoDB容器连接被拒绝问题解决方案
核心原因排查
你遇到的Connection refused错误由三个核心问题导致:自定义Mongo镜像启动参数错误、文件权限配置错误、动态生成的IP与实际Mongo容器IP不匹配。
具体修复步骤
1. 修复启动脚本
init_script.sh
默认mongod仅绑定127.0.0.1,外部容器无法访问,同时需要保证进程持续运行避免容器退出,修改脚本内容如下:
#!/bin/bash service ssh restart # 绑定所有网卡IP,指定数据存储目录,前台运行保证容器不退出 mongod --bind_ip 0.0.0.0 --dbpath /data/db
2. 修复Dockerfile配置
- 你当前使用的Mongo源对应Ubuntu 20.04版本,将基础镜像从
ubuntu:latest改为ubuntu:20.04避免版本不兼容导致Mongo安装失败 - 复制启动脚本后添加执行权限
- 修改数据目录权限,mongod默认使用mongodb用户运行,给root权限会导致启动无写入权限失败
修改后的Dockerfile核心调整片段如下:
- 你当前使用的Mongo源对应Ubuntu 20.04版本,将基础镜像从
# 替换原来的FROM行 FROM ubuntu:20.04 # 复制完启动脚本后添加执行权限 COPY init_script.sh /home RUN chmod +x /home/init_script.sh RUN chown -R admin /home/admin/.ssh RUN chmod 600 /home/admin/.ssh/authorized_keys # 替换原来的chown行,将数据目录权限给mongodb用户 RUN chown -R mongodb:mongodb /data/db
3. 修复IP匹配问题
报错日志中尝试连接的IP是172.17.0.4,但你的ip_file.json中写的是172.17.0.3,说明容器重启后IP发生了变更。建议不要使用动态生成的容器IP,改为创建Docker自定义网络,通过容器名访问Mongo,避免IP漂移问题。
验证排查方法
- 进入运行中的Mongo容器,执行
ps aux | grep mongod确认进程是否正常运行 - 容器内执行
mongosh --host 127.0.0.1:27017验证本地连接是否正常 - 业务容器内执行
telnet <Mongo容器IP> 27017验证网络连通性
内容的提问来源于stack exchange,提问作者rohit tadiparti
相关产品推荐
相关产品推荐

