Docker容器连接异常:authentication微服务无法连接MongoDB容器
Docker容器间连接问题:Authentication微服务无法连接MongoDB
我在Windows 11系统上部署了两个Docker容器:一个运行名为authentication的微服务,另一个运行MongoDB数据库。两个容器均已正常启动,但微服务无法连接到MongoDB数据库。相关配置文件如下(docker-compose.yml文件位于authentication微服务的独立文件夹中),需要实现微服务容器与MongoDB容器的连接:
docker-compose.yml文件
version: "3.9" services: authentication: build: ../authentication restart: always depends_on: - mongodb ports: - 8080:8080 environment: PORT: 8080 MONGODB: mongodb://localhost:27017/emprendamos mongodb: image: mongo:6 restart: always ports: - 27017:27017 environment: MONGODB_DATABASE: emprendamos volumes: - ./mongo:/data/db
authentication微服务的.env文件
PORT=8080 MONGODB='mongodb://localhost:27017/emprendamos'
authentication微服务的Dockerfile
FROM node:18.12.1 WORKDIR /authentication COPY . . RUN npm install RUN npm run build CMD [ "node","dist/main.js" ]
解决方案
核心问题是容器内的localhost指向容器自身,而非宿主机或其他容器。Docker Compose会自动为同一编排下的容器创建内部网络,容器之间可通过服务名称直接通信。需要修改两处配置:
1. 修改docker-compose.yml中的MONGODB环境变量
将authentication服务的MONGODB连接地址改为mongodb://mongodb:27017/emprendamos,这里的mongodb是docker-compose中定义的服务名称:
version: "3.9" services: authentication: build: ../authentication restart: always depends_on: - mongodb ports: - 8080:8080 environment: PORT: 8080 MONGODB: mongodb://mongodb:27017/emprendamos # 替换为服务名 mongodb: image: mongo:6 restart: always ports: - 27017:27017 environment: MONGODB_DATABASE: emprendamos volumes: - ./mongo:/data/db
2. 修改authentication微服务的.env文件
同步更新MONGODB连接地址:
PORT=8080 MONGODB='mongodb://mongodb:27017/emprendamos'
额外注意事项
depends_on仅保证mongodb容器先启动,但不保证MongoDB服务完全就绪。若微服务启动过快仍可能连接失败,可在微服务代码中添加连接重试逻辑,或使用wait-for-it工具等待MongoDB端口就绪。- 确保微服务代码正确读取环境变量
MONGODB,而非使用硬编码的连接地址。
内容的提问来源于stack exchange,提问作者Luciano Pulido
相关产品推荐
相关产品推荐

