启用MongoDB端点时CosmosDB Emulator Docker容器无法启动
macOS上Azure Cosmos DB Linux模拟器MongoDB API容器启动失败(Exit Code 0)
在macOS环境下部署Azure Cosmos DB Linux模拟器时,NoSQL API容器能正常启动,但启动MongoDB API版本时,执行指定命令后容器立即以Exit Code 0退出,且未正确分配端口。使用的启动命令如下:
docker run \ --publish 8081:8081 \ --publish 10250-10255:10250-10255 \ --name=test-linux-emulator-mongo \ --env AZURE_COSMOS_EMULATOR_PARTITION_COUNT=10 \ --env AZURE_COSMOS_EMULATOR_ENABLE_DATA_PERSISTENCE=true \ --env AZURE_COSMOS_EMULATOR_IP_ADDRESS_OVERRIDE=$ipaddr \ --env AZURE_COSMOS_EMULATOR_ENABLE_MONGODB_ENDPOINT=4.2 \ --interactive \ --tty \ mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:latest
排查与解决方法
1. 确认$ipaddr变量有效性
容器启动必须依赖正确的本地IP地址,macOS上获取并设置IP的正确方式:
- 执行以下命令获取Wi-Fi接口IP(以太网用
en1替换en0):export ipaddr=$(ipconfig getifaddr en0) - 执行
echo $ipaddr验证输出为有效本地IP(如192.168.1.105),避免使用localhost或无效IP。
2. 补充MongoDB API端口映射
MongoDB API默认通过容器的10255端口对外提供服务,需显式映射到宿主机的27017端口(标准MongoDB端口)。修改启动命令,添加端口映射规则:
docker run \ --publish 8081:8081 \ --publish 10250-10255:10250-10255 \ --publish 27017:10255 \ --name=test-linux-emulator-mongo \ --env AZURE_COSMOS_EMULATOR_PARTITION_COUNT=10 \ --env AZURE_COSMOS_EMULATOR_ENABLE_DATA_PERSISTENCE=true \ --env AZURE_COSMOS_EMULATOR_IP_ADDRESS_OVERRIDE=$ipaddr \ --env AZURE_COSMOS_EMULATOR_ENABLE_MONGODB_ENDPOINT=4.2 \ --interactive \ --tty \ mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:latest
3. 查看启动日志定位根因
如果修改后仍失败,改用后台启动并查看日志:
# 后台启动容器 docker run -d \ --publish 8081:8081 \ --publish 10250-10255:10250-10255 \ --publish 27017:10255 \ --name=test-linux-emulator-mongo \ --env AZURE_COSMOS_EMULATOR_PARTITION_COUNT=10 \ --env AZURE_COSMOS_EMULATOR_ENABLE_DATA_PERSISTENCE=true \ --env AZURE_COSMOS_EMULATOR_IP_ADDRESS_OVERRIDE=$ipaddr \ --env AZURE_COSMOS_EMULATOR_ENABLE_MONGODB_ENDPOINT=4.2 \ mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:latest # 查看容器日志 docker logs test-linux-emulator-mongo
日志中会明确提示错误原因,比如IP绑定失败、端口被占用、权限不足等。
4. 清理残留容器与镜像
旧容器的残留配置可能干扰新启动,执行以下命令清理:
# 停止并删除容器 docker stop test-linux-emulator-mongo && docker rm test-linux-emulator-mongo # 重新拉取镜像(可选,确保使用最新版本) docker pull mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:latest
5. 验证MongoDB API连接
容器启动成功后,使用mongosh测试连接:
mongosh "mongodb://localhost:27017/?ssl=true" --username localhost --password C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==
连接成功即可正常使用MongoDB API操作Cosmos DB模拟器。
内容的提问来源于stack exchange,提问作者Marco
相关产品推荐
相关产品推荐

