当我连接到节点js中的RabbitMQ服务器时,我获取了这个错误。这是一个微服务应用程序。我现在有两个服务1.users 2.posts
RabbitMQ服务器正在运行,我可以使用localhost查看:15672
但不知何故,我的节点服务器无法与rabbitmq连接。
我在下面附上了docker-compose.yml和Dockerfile。
mongo_db_1 | {"t":{"$date":"2022-08-20T09:17:49.025+00:00"},"s":"I", "c":"NETWORK", "id":51800, "ctx":"conn4","msg":"client metadata","attr":{"remote":"172.29.0.4:50454","client":"conn4","doc":{"driver":{"name":"nodejs|Mongoose","version":"4.8.1"},"os":{"type":"Linux","name":"linux","architecture":"x64","version":"5.10.104-linuxkit"},"platform":"Node.js v18.7.0, LE (unified)","version":"4.8.1|6.5.1"}}}
users_1 | node:internal/process/promises:288
users_1 | triggerUncaughtException(err, true /* fromPromise */);
users_1 | ^
users_1 |
users_1 | Error: getaddrinfo ENOTFOUND rabbitmq
users_1 | at GetAddrInfoReqWrap.onlookup [as oncomplete] (node:dns:111:26) {
users_1 | errno: -3008,
users_1 | code: 'ENOTFOUND',
users_1 | syscall: 'getaddrinfo',
users_1 | hostname: 'rabbitmq'
users_1 | }
users_1 |
users_1 | Node.js v18.7.0
mongo_db_1 | {"t":{"$date":"2022-08-20T09:17:49.041+00:00"},"s":"I", "c":"NETWORK", "id":22944, "ctx":"conn3","msg":"Connection ended","attr":{"remote":"172.29.0.4:50452","uuid":"f20dc375-8f2d-4501-97bd-8b81616e64e0","connectionId":3,"connectionCount":3}}
mongo_db_1 | {"t":{"$date":"2022-08-20T09:17:49.041+00:00"},"s":"I", "c":"NETWORK", "id":22944, "ctx":"conn4","msg":"Connection ended","attr":{"remote":"172.29.0.4:50454","uuid":"f9c5daa3-dd2d-4862-95f2-1e0f7710cd8d","connectionId":4,"connectionCount":2}}
users_1 | [nodemon] app crashed - waiting for file changes before starting...
POSRS服务停靠文件
FROM node:alpine
WORKDIR /posts/src/app
COPY package*.json .
RUN npm ci
COPY . .
CMD ["npm", "run","start"]
POSRS服务停靠文件
FROM node:alpine
WORKDIR /users/src/app
COPY package*.json .[enter image description here][1]
RUN npm ci
COPY . .
CMD ["npm", "run","start"]
docker-compose.yml文件
version: "3.9"
services:
#MongoDB services
mongo_db:
image: mongo:latest
restart: always
ports:
- 2717:27017
volumes:
- mongo_db:/data/db
#Rabbitmq services
rabbitmq:
image: rabbitmq:3.8-management-alpine
restart: always
ports:
# AMQP protocol port
- "5672:5672"
# HTTP management UI
- "15672:15672"
networks:
- rabbitmq_nodejs
#Node users API service
users:
build:
context: ./users
dockerfile: Dockerfile
restart: always
ports:
- 8000:8000
volumes:
- ./users:/users/src/app/
environment:
APP_SECRET: "barkat"
MONGODB_URI: "mongodb://mongo_db:27017/users"
PORT: 8000
MOJO_API_KEY: "test-39c833cd-adc0-4787-8027-400b8551d49f"
MESSAGE_BROKER_URL: "amqp://rabbitmq"
depends_on:
- mongo_db
- rabbitmq
#Node posts API service
posts:
build:
context: ./posts
dockerfile: Dockerfile
restart: always
ports:
- 8001:8001
volumes:
- ./posts:/posts/src/app/
environment:
APP_SECRET: "barkat"
MONGODB_URI: "mongodb://mongo_db:27017/posts"
PORT: 8001
MOJO_API_KEY: "test-39c833cd-adc0-4787-8027-400b8551d49f"
MESSAGE_BROKER_URL: "amqp://rabbitmq"
depends_on:
- mongo_db
- rabbitmq
volumes:
mongo_db: {}
networks:
rabbitmq_nodejs:
driver: bridge
1条答案
按热度按时间hlswsv351#
RabbitMQ代理位于其自己的Docker网络上,但没有其他网络。
删除文件中的两个
networks:
块,一个在顶层,另一个在rabbitmq
服务下。Compose为您创建一个名为default
的网络,并将容器附加到该网络,但前提是没有手动声明它们自己的networks:
。如果删除networks:
块,那么每个容器都将连接到default
网络,并在容器网络将正常工作。Docker文档中的Networking in Compose进一步描述了此设置。