[英]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。
failed to connect to server [127.0.0.1:27017] on first connect
但通过 GUI 作为指南针我能够连接到相同的 URL。failed to connect to server [wetaxitask_mongodb:27017] on first connect [Error: connect ECONNREFUSED 172.18.0.3:27017
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.