Отказано в соединении Docker compose

#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 проверять брандмауэры, но он ответил «Статус: неактивный».