Docker中MongoDB连接出现空主机组件错误的解决办法
解决Docker中MongoDB连接报错的问题
首先咱们得搞懂你遇到的错误根源:你用到的$MONGO_PORT_27017_TCP_ADDR和$MONGO_PORT_27017_TCP_PORT这两个环境变量,是Docker旧版link机制里才会自动注入的变量,但你当前是直接启动mongo容器并执行shell命令,这两个变量根本没被设置,导致连接字符串变成了mongodb://:/PMSDB,自然就触发了"Empty host component"的报错。
下面给你几个简单可行的解决方案,按需选择:
方案1:直接进入运行中的MongoDB容器Shell(最常用)
先后台启动一个命名的mongo容器:
docker run -d --name my-mongo mongo
然后通过docker exec进入容器的mongo shell,直接指定要连接的数据库PMSDB:
docker exec -it my-mongo mongo PMSDB
如果PMSDB数据库不存在,MongoDB会自动帮你创建它。
方案2:启动容器时直接指定连接命令
在容器内部,MongoDB默认监听localhost:27017,所以不需要依赖那些环境变量,直接写完整的连接地址即可:
docker run -it mongo mongo localhost:27017/PMSDB
执行这条命令后会直接进入指定数据库的shell。
方案3:连接另一个运行中的MongoDB容器(Docker推荐方式)
如果要连接已经在运行的另一个mongo容器,推荐用Docker自定义网络(比旧版link更稳定):
- 先创建一个自定义网络:
docker network create mongo-network
- 启动目标mongo容器并加入这个网络:
docker run -d --name mongo-db --network mongo-network mongo
- 启动客户端容器连接它(自定义网络支持容器名称解析,直接用容器名
mongo-db作为主机名):
docker run -it --network mongo-network mongo mongo mongo-db:27017/PMSDB
另外补充一句:你之前用的*_TCP_ADDR这类环境变量是Docker的旧特性,现在官方已经不推荐使用了,建议优先用自定义网络或者容器名称的方式进行容器间通信。
内容的提问来源于stack exchange,提问作者N15
相关产品推荐
相关产品推荐

