gpt4 book ai didi

mongodb - Docker 无法在内部将服务名称转换为 IP 地址

转载 作者:行者123 更新时间:2023-12-04 08:36:24 26 4
gpt4 key购买 nike

我正在尝试容器化三个图像:我的 Next.js 应用程序、Strapi 图像和 Mongo 数据库。
我有一个包含 Next.js 应用程序说明的 Dockerfile:

FROM node:14.15.0

WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
RUN npm run build
CMD [ "npm", "start" ]
我正在我的 docker-compose.yml 中组装所有图像:
version: "3.7"

services:

mongo:
container_name: example-mongo
image: mongo:latest
env_file: .env
environment:
MONGO_INITDB_DATABASE: ${DATABASE_NAME}
volumes:
- ./data:/data/db
ports:
- '27017:27017'

strapi:
container_name: example-strapi
image: strapi/strapi:latest
env_file: .env
volumes:
- ./strapi-app:/usr/src/strapi-app
ports:
- '1337:1337'

app:
container_name: example-app
build:
context: .
dockerfile: Dockerfile
depends_on:
- mongo
- strapi
env_file:
- .env
volumes:
- .:/usr/src/app
ports:
- '3000:3000'

volumes:
data:
strapi-app:
我的 .env 文件如下所示:
DATABASE_CLIENT=mongo
DATABASE_HOST=mongo
DATABASE_PORT=27017
DATABASE_NAME=example
问题是,当我的 Next.js 应用程序运行时 npm run build ,尝试连接到 Mongo 数据库时失败(失败的连接字符串: mongodb://mongo:27017/example )。错误是 MongooseServerSelectionError: getaddrinfo ENOTFOUND mongo .
从我在论坛和一些线程中发现的内容来看,这通常指向一些 Docker 内部 DNS 问题。它无法将 mongo 转换为 Mongo DB 服务的 IP 地址。
我尝试只使用 Mongo DB 运行 Strapi 图像,因为它能够毫无问题地连接到 Mongo DB。我是否缺少 Next.js 应用程序的一些配置?这是一个简单的例子,它复制了这个问题,对于任何感兴趣的人: https://gitlab.com/jan.kraus.cf/next-mongo-strapi

最佳答案

您在环境的构建阶段会收到该错误。这在任何容器启动之前运行,当然 mongo服务不可用。
您可以通过简单地运行 docker build . 来重现这一点。在包含 Dockerfile 的目录中。它达到:

Step 7/8 : RUN npm run build
---> Running in 28aa6347395f

> learn-starter@0.1.0 build /usr/src/app
> next build
之后很快就失败了:
info  - Collecting page data...
Trying to connect to MongoDB on: mongodb://mongo:27017/example
MongooseServerSelectionError: getaddrinfo ENOTFOUND mongo
[...]
您的构建不能依赖于外部数据库或其他资源。任何类似的事情都需要在运行时而不是构建时发生。

关于mongodb - Docker 无法在内部将服务名称转换为 IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64777567/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com