sách gpt4 ai đã đi

node.js - 如何将docker容器连接到mongodb

In lại 作者:太空宇宙 更新时间:2023-11-03 23:19:12 28 4
mua khóa gpt4 Nike

我在将作为 docker 容器运行的应用程序连接到 mongoDB 时遇到问题。我知道新版本 docker-compose 已弃用“链接”,因此我尝试使用自定义网络。我的 docker-compose.yml:

version: "3.3"

dịch vụ:

app:
container_name: app
xây dựng: ./app
phụ thuộc vào:
- "mongodb"
networks:
- my-network
command: pm2-docker start pm2.config.js --watch
khối lượng:
- ./app/logs:/opt/app/logs
- ./app:/opt/app
cổng:
- "3010:80"

mongodb:
image: mongo
container_name: mongodb
restart: always
môi trường:
MONGO_INITDB_ROOT_PASSWORD: pw
MONGO_INITDB_ROOT_USERNAME: login
MONGO_INITDB_DATABASE: dbname
khối lượng:
- ./mongodb/db:/data/db
cổng:
- "27017:27017"
networks:
- my-network

networks:
my-network:
driver: bridge

我的应用程序的 Dockerfile:

FROM node:10.7.0


RUN npm i -g pm2
RUN pm2 install pm2-logrotate \
&& pm2 set pm2-logrotate:max_size 50M \
&& pm2 set pm2-logrotate:compress true \
&& pm2 set pm2-logrotate:workerInterval 60

RUN mkdir -p /tmp
COPY package*.json /tmp/
RUN cd /tmp \
&& npm i \
&& npm cache clean --force

RUN mkdir -p /opt/app && cp -a /tmp/node_modules /opt/app/
WORKDIR /opt/app
COPY . /opt/app/
VOLUME [ "/opt/app/logs/" ]

ENV PORT 80
ENV MONGODB_AUTH mongodb://login:pw@127.0.0.1:27017/dbname
EXPOSE 80

CMD [ "pm2-docker", "start", "pm2.config.js", "--env", "production" ]

Khi tôi chạy MongoClient.connect(process.env.MONGODB_AUTH, { useNewUrlParser: true }); 时,我在应用程序中收到以下错误消息:

MongoNetworkError: failed to connect to server [127.0.0.1:27017] on first connect [MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017]

我不明白我做错了什么。这是 docker network ls 的控制台输出:

NETWORK ID NAME DRIVER SCOPE
4731ec3d6886 bridge bridge local
e5a6bf78bd5f docker_gwbridge bridge local
aae21167a37a host host local
d6ba0dfe01a3 myproject_default bridge local
34af02bd434d myproject_my-network bridge local
5911111233bf none null local

Đây làdocker网络检查myproject_my-network的输出:

[
{
"Name": "myproject_my-network",
"Id": "34af02bd434d7fe8b6755f584b45eeb0a47fafb087d7f44023598d6ae8bb79a4",
"Created": "2018-08-05T22:21:06.938675177+03:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.20.0.0/16",
"Gateway": "172.20.0.1"
}
]
},
"Internal": false,
"Attachable": true,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {},
"Labels": {
"com.docker.compose.network": "my-network",
"com.docker.compose.project": "myproject"
}
}
]

当我尝试使用 172.20.0.1 而不是 127.0.0.1 时,我收到相同的错误。我很高兴为我的问题提供任何帮助

1 Câu trả lời

您似乎正在名为 mongodb 的容器内运行 mongodb。

MongoDB 正在监听容器的端口 27017,并且您的容器将其发布到主机的端口 27017 上。

但是在您的应用程序容器内,没有应用程序正在监听本地主机的端口 27017。

所以你的错误是正常的,你不应该以这种方式连接到mongo。相反,您可以尝试:

ENV MONGODB_AUTH mongodb://login:pw@mongodb:27017/dbname

您仍然需要从主机上使用 mongodb://login:pw@127.0.0.1:27017/dbname 访问 mongo。

docker compose 的文档中有一个示例:

Within the web container, your connection string to db would look like postgres://db:5432, and from the host machine, the connection string would look like postgres://{DOCKER_IP}:8001. From https://docs.docker.com/compose/networking/

关于node.js - 如何将docker容器连接到mongodb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51698026/

28 4 0
太空宇宙
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com