簡體   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