NGINX HTTP请求到链接容器

时间:2018-11-23 01:15:18

标签: node.js http docker nginx containers

这是我的docker-compose文件,它在同一主机上启动一个NodeJS/PM2容器和一个React/Nginx容器。

version: '3'
services:
  nodejs:
    image: nodejs_pm2:1.00
    container_name: NODE_CONTAINER
    ports:
      - "8000:8000"
    build:
      context: ./nodejs
      dockerfile: Dockerfile-nodejs
  react:
    image: react_nginx:1.00
    container_name: REACT_CONTAINER
    ports:
      - "3000:3000"
    build:
      context: ./react-app
      dockerfile: Dockerfile-react
    depends_on:
     - nodejs

如您所见,我的react服务depends_on nodejs。这应该链接容器,对吗?

问题1)假设是真的,向我的节点后端发出HTTP请求的正确方法是什么?

这是我尝试对Nginx配置文件执行的操作:

upstream backend {
    server nodejs:8000
  }

  server {
    listen 3000;

    location ~ ^/api/[0-9a-z]+/$ {
      proxy_pass http://backend/;
      include /etc/nginx/proxy_params;
    }

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

这不起作用。实际上,这完全阻止了前端的出现。我要从我的react应用中尝试做这样的事情axios.get("http://backend/api/*")。我查看了几个stackoverflow帖子,但似乎没有一个对我有用。

问题2),后续问题是,如果出现以下情况,链接容器有什么意义?  两个容器位于同一主机上,我不能像平常一样向localhost:port发出请求吗?

1 个答案:

答案 0 :(得分:0)

您实际上有3个问题:

问题0 这应该链接容器,对吗?

不是,depends_on定义了容器依赖性(例如,在容器B之前等待容器A启动),而不是链接

问题1 ?向我的节点后端发出HTTP请求的正确方法是什么?

您的2个容器可以使用container_name属性相互连接 因此,对于您的nginx.config,您应该能够通过NODE_CONTAINER:8000

连接到nodejs容器

问题2 * ,如果两个容器位于同一主机上,那么链接容器的意义何在?我不能像往常一样向localhost:port发出请求吗?

请参考此内容,它将比我更好地解释容器网络和链接概念https://docs.docker.com/compose/networking/