mongoose 使用Docker时连接到MongoDB Atlas的问题

rkkpypqq  于 2022-12-23  发布在  Go
关注(0)|答案(1)|浏览(131)

我正在构建一个简单的node. js/ express应用程序,其中使用MongoDB Atlas进行数据存储。当我使用node index.js在本地运行该应用程序时,一切都按预期运行。我可以连接到MongoDB Atlas并读取/写入数据。
现在我希望这个应用程序在Docker容器中运行。使用docker build . -t IMAGENAME --network=host构建映像没有问题(必须添加--network=host,否则无法加载一些依赖项)。当我使用docker run -p 4000:3000 -d IMAGENAME:latest启动容器时,应用程序按预期启动。
但是,我无法连接到MongoDB Atlas并收到以下错误:

Error: querySrv ETIMEOUT _mongodb._tcp.dbcluster0.kux1t.mongodb.net
    at QueryReqWrap.onresolve [as oncomplete] (node:internal/dns/promises:251:17) {
  errno: undefined,
  code: 'ETIMEOUT',
  syscall: 'querySrv',
  hostname: '_mongodb._tcp.dbcluster0.kux1t.mongodb.net'
}

你知道为什么我可以在不运行Docker的情况下连接到Atlas,但在容器中运行映像时却不行吗?
我的Dockerfile看起来像这样:

FROM node:lts-alpine
WORKDIR /backend
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD [ "node", "index.js" ]

这是我正在使用的连接字符串(也尝试了节点2.2.12的格式):

MONGO_URI='mongodb+srv://username:password@dbcluster0.kux1t.mongodb.net/database1?retryWrites=true&w=majority
aoyhnmkz

aoyhnmkz1#

最后,这与我的主机网络配置有关,在构建和运行期间使用--network host参数运行Docker解决了这个问题

相关问题