部署在Docker容器中的Nginx不会暴露部署在另一个Docker容器中的nuxtjs(502 Bad Gateway)

时间:2019-07-01 09:14:40

标签: docker nginx docker-compose nuxt.js

我正在尝试使用nginx作为docker容器中的代理服务器运行nuxtjs应用程序。所以,我有2个容器:nginx和nuxt enter image description here

这是我构建nuxt应用程序的方式

FROM node:11.15
ENV APP_ROOT /src
RUN mkdir ${APP_ROOT}
WORKDIR ${APP_ROOT}
ADD . ${APP_ROOT}
RUN npm install
RUN npm run build
ENV host 0.0.0.0

结果似乎很好 enter image description here

接下来是nginx配置

server {
  listen 80;
  server_name dev.iceik.com.ua;

  location / {
      proxy_pass http://nuxt:3000;
      proxy_set_header Host $host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

我也尝试过这种nginx配置

upstream nuxt {
  server nuxt:3000;
}
server {
  listen 80;
  server_name dev.iceik.com.ua;

  location / {
      proxy_pass http://nuxt;
      proxy_set_header Host $host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

最后是我的docker-compose文件

version: "3"

services:
  nuxt:
    build: ./app/
    container_name: nuxt
    restart: always
    ports:
      - "3000:3000"
    command:
      "npm run start"

  nginx:
    image: nginx:1.17
    container_name: nginx
    ports:
      - "80:80"
    volumes:
      - ./nginx:/etc/nginx/conf.d
    depends_on:
      - nuxt

我可以从Nginx容器ping Nuxt容器 enter image description here

这里也是打开的端口 enter image description here

因此,预期结果是我可以访问我的nuxt应用程序。 但是我收到502 Bad Gateway

您有什么想法,为什么nginx不公开我的nuxt应用程序?

谢谢您的任何建议!

2 个答案:

答案 0 :(得分:1)

Nodejs暴露于localhost:3000而非0.0.0.0:3000

请更正它。会工作

答案 1 :(得分:0)

如果您的容器需要互相交谈,总是将它们放入网络中,这是很好的选择,另一种方法是使用主机网络(仅适用于linux)。尝试在docker-compose.yml下面,他们应该能够通过容器名称相互交谈。

version: "3"

services:
  nuxt:
    build: ./app/
    container_name: nuxt
    restart: always
    ports:
      - "3000:3000"
    command:
      "npm run start"
    networks:
      - my_net

  nginx:
    image: nginx:1.17
    container_name: nginx
    ports:
      - "80:80"
    volumes:
      - ./nginx:/etc/nginx/conf.d
    depends_on:
      - nuxt
    networks:
      - my_net

networks:
  my_net:
    driver: "bridge"