我正在构建一个简单的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
1条答案
按热度按时间aoyhnmkz1#
最后,这与我的主机网络配置有关,在构建和运行期间使用
--network host
参数运行Docker解决了这个问题