繁体   English   中英

如何配置 Nginx 和 Docker 以正确方式运行 Node 和 Mongo

[英]How to configure Nginx with Docker to run Node and Mongo in the correct way

我正在 Node Mongo 中构建一个项目,并使用 Docker 和 Nginx 在我的本地计算机 MacBook pro-Catalina 上运行所有项目。 我有几个我无法自己解决的问题,我不知道如何配置 Nginx 和 Docker 以使所有工作正常。 在帖子的末尾将显示我的 Dockerfile、Docker 组合和 Nginx。

  1. 当我运行我的容器时,节点容器无法连接到 Mongo DB 并出现此错误: failed to connect to server [127.0.0.1:27017] on first connect但通过 GUI 作为指南针我能够连接到相同的 URL。
  2. 编辑我尝试使用容器的名称,它是 IP bu 错误failed to connect to server [wetaxitask_mongodb:27017] on first connect [Error: connect ECONNREFUSED 172.18.0.3:27017
  3. 下一个问题是我收到 Python 的错误,即使我将它安装在我的容器上,并且错误如屏幕截图所示,因为我不知道如何描述: 在此处输入图像描述
  4. 当一切都在运行时,我试图响应的任何端点都是 Nginx 欢迎页面,所以可能我做错了 conf 本身在此处输入图像描述

Dockerfile:

# Developpment stage
FROM node:12.18-alpine AS base-builder
RUN apk update
RUN apk add --no-cache python make g++
RUN apk add --no-cache libc6-compat
WORKDIR /usr/src/app
COPY ["tsconfig.json", "package.json", "package-lock.json*", "npm-shrinkwrap.json*", "./"]
ADD . /usr/src/app
COPY ./.env /usr/src/app/.env
RUN npm cache clean --force
RUN npm install

# ------------------------------------------------------
# Production Build
# ------------------------------------------------------
FROM nginx:1.19.0-alpine
RUN apk add --no-cache --repository http://nl.alpinelinux.org/alpine/edge/main libuv \
    &&  apk add --update nodejs npm

WORKDIR /usr/src/app
RUN ls -l /usr/src/app/
COPY --from=0  /usr/src/app/ .
RUN rm /etc/nginx/conf.d/default.conf
RUN rm -rf /docker-entrypoint.d
COPY nginx/nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 3000
EXPOSE 80
#CMD ["nginx", "-g", "daemon off;","npm", "start"]
CMD nginx ; exec npm start

Docker 组成:

version: '3.8'

services:
  wetaxitask:
    container_name: wetaxitask_api_dev
    image: wetaxitask
    restart: always
    build: .
    depends_on:
      - mongodb
      - redis
    env_file: .env
    ports:
      - 8080:80
    links:
      - redis
      - mongodb

  mongodb:
    container_name: wetaxitask_mongodb
    image: mongo:latest
    restart: always
    ports:
      - 27017:27017
    volumes:
      - ./data:/data/db
    environment:
      - MONGO_INITDB_DATABASE=wetaxitask

  redis:
    container_name: wetaxitask_redis
    image: redis:latest
    ports:
      - 6379:6379

Nginx:

server {

  listen 80;

  location / {
    root   /usr/share/nginx/html;
    index  index.html index.htm;
    try_files $uri $uri/ /index.html;
  }

  location /welcome {
    proxy_pass http://127.0.0.1:3000;

  }

  error_page   500 502 503 504  /50x.html;

  location = /50x.html {
    root   /usr/share/nginx/html;
  }
}

尝试将主机名从 localhost(127.0.0.1) 更改为 mongodb(在 docker-compose 中定义的服务名称)。 Docker dns 魔法会做 rest。

编辑:将它们添加到 docker 组合中的公共网络中,容器应该能够在请求中使用它们的名称作为主机名进行通信

version: '3.8'

services:
  wetaxitask:
    container_name: wetaxitask_api_dev
    image: wetaxitask
    restart: always
    build: .
    depends_on:
      - mongodb
      - redis
    env_file: .env
    ports:
      - 8080:80
    links:
      - redis
      - mongodb
    networks:
      - my-network

  mongodb:
    container_name: wetaxitask_mongodb
    image: mongo:latest
    restart: always
    ports:
      - 27017:27017
    volumes:
      - ./data:/data/db
    environment:
      - MONGO_INITDB_DATABASE=wetaxitask
    networks:
      - my-network

  redis:
    container_name: wetaxitask_redis
    image: redis:latest
    ports:
      - 6379:6379
    networks:
      - my-network

networks:
  my-network:
#this should define a network called my-network with default settings

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM