无法从外部docker访问节点应用程序

问题描述 投票:1回答:1

尝试访问容器上的NodeJs应用程序时遇到麻烦。

恢复:我自定义了自己的映像以在容器上运行pm2和环回。我将我的应用程序配置为侦听docker网络中另一个容器上的mongodb。 这很好。我创建了docker-compose.yml文件,如下所示:

version: '3.5'

services:
  webapp:
    expose:
      - "3000"
    ports:
      - "3000:3000"
    volumes:
      - ${NODEJS_PATH}:${NODEJS_PATH_DESTIONATION}
    image: ${CUSTOMIZED_IMAGE}
    networks:
      default:
        ipv4_address: ${NODEJS_IP}

  db:
    image: mongo:4.2.6
    container_name: mongodb
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: ${MONGO_INITDB_ROOT_USERNAME}
      MONGO_INITDB_ROOT_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD}
      MONGO_INITDB_DATABASE: ${MONGO_INITDB_DATABASE}
    volumes:
      - ${MONGO_SCRIPT_PATH}:${MONGO_SCRIPT_DESTINATION_PATH}
    networks:
      default:
        ipv4_address: ${MONGO_INITDB_IP}

networks:
  default:
    external:
      name: ${CUSTOMIZED_NET}

我现在使用docker-compose运行webapp来运行我的webapp,用于自定义目的。在此容器中,我执行下一个cmd

pm2 start app.js --env environment_variables

它在http://localhost:3000上运行NodeJS App 在docker内部

我试图通过浏览器http:// {DOCKER_IP}:3000进行检查,但无法正常工作。

我将永远感谢您对这个麻烦的任何答复。

node.js docker docker-compose
1个回答
0
投票

我们使用nginx将服务从docker proxy_pass传递到外部世界。

我们这样做是因为我们需要docker_network上的其他服务来侦听此服务。

这里是来自nginx的配置

server {
        listen 80;
        server_name domain.local;

        location /  {
                proxy_pass    http://localhost:3000;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection 'upgrade';
                proxy_set_header Host $host;
                proxy_cache_bypass $http_upgrade;
        }
}
© www.soinside.com 2019 - 2024. All rights reserved.