#node.js #docker #docker-compose
#node.js #docker #docker-compose
Вопрос:
Я получаю сообщение об ошибке «отказано в подключении» при попытке зайти на мой сервер NodeJS, работающий в контейнере Docker. Если я попытаюсь свернуть сервер с хост-компьютера, я получаю сообщение об ошибке «curl: (56) Сбой Recv: сброс соединения одноранговым узлом».
Когда я запускаю sudo docker-compose up -d
, он запускает мои службы и запуск sudo docker ps -a
показывает следующее:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e56b30b1de9c mongo:4.1.8-xenial "docker-entrypoint.s…" About a minute ago Up About a minute 27017/tcp db
0d82b0a881e5 nodejs "docker-entrypoint.s…" About a minute ago Up About a minute 0.0.0.0:3000->3000/tcp nodejs
Контейнеры запущены на сервере с IP-адресом ‘192.168.0.24’, поэтому я пытаюсь попасть в конечную точку в моем приложении ‘nodejs’ через ‘192.168.0.24: 3000 / items’, но это приводит к ошибке отказа в соединении.
docker-compose.yml
version: '3'
services:
nodejs:
build:
context: .
dockerfile: Dockerfile
image: nodejs
container_name: nodejs
restart: unless-stopped
env_file: .env
environment:
- MONGO_USERNAME=$MONGO_USERNAME
- MONGO_PASSWORD=$MONGO_PASSWORD
- MONGO_HOSTNAME=db
- MONGO_PORT=$MONGO_PORT
- MONGO_DB=$MONGO_DB
ports:
- "3000:3000"
volumes:
- .:/home/node/app
- /home/node/app/node_modules
networks:
- app-network
command: ./wait-for.sh db:27017 -- /home/node/app/node_modules/.bin/nodemon app.js
db:
image: mongo:4.1.8-xenial
container_name: db
restart: unless-stopped
env_file: .env
environment:
- MONGO_INITDB_ROOT_USERNAME=$MONGO_USERNAME
- MONGO_INITDB_ROOT_PASSWORD=$MONGO_PASSWORD
volumes:
- dbdata:/data/db
networks:
- app-network
networks:
app-network:
driver: bridge
volumes:
dbdata:
node_modules:
Dockerfile
FROM node:10-alpine
RUN mkdir -p /home/node/app/node_modules amp;amp; chown -R node:node /home/node/app
WORKDIR /home/node/app
COPY package*.json ./
USER node
RUN npm install
COPY --chown=node:node . .
EXPOSE 3000
CMD [ "npm", "app.js" ]
Комментарии:
1. В какой операционной системе / среде хоста работает Docker? Включен ли брандмауэр (программный или аппаратный)?
2. Также можете ли вы получить доступ к порту 3000 в контейнере с хоста Docker, не переходя по сети? Просто используя localhost?
3. @doublesharp Я запускаю Docker на Raspberry Pi с Ubuntu 20.04.
curl localhost:3000
возвращает «curl: (56) Сбой Recv: сброс соединения одноранговым узлом». Я побежалufw status
проверять брандмауэры, но он ответил «Статус: неактивный».