docker - Nginx 在多容器 docker compose 设置中找不到上游主机

标签 docker nginx docker-compose containers

我正在使用 docker-compose 在本地运行一个多 docker 容器,容器是 React 前端“客户端”、一个 Nodejs 应用程序“api”和一个位于两个前面的 Nginx 代理。我一直在使用 docker-compose 设置如下

version: '3'
services:
  client:
    build:
      dockerfile: Dockerfile.dev
      context: ./client
    volumes:
      - /usr/app/node_modules
      - ./client:/usr/app
  api:
    build:
      dockerfile: Dockerfile.dev
      context: ./server
    volumes:
      - /usr/app/node_modules
      - ./server:/usr/app
  nginx:
    restart: always
    build:
      dockerfile: Dockerfile.dev
      context: ./nginx
    ports:
      - '8080:80'

我的 Nginx 设置如下
upstream client {
    server client:3000;
}

upstream api {
    server api:5000;
}

server {
    listen 80;
    server_name _;

    location / {
        if ($http_x_forwarded_proto != 'https') {
            return 301 https://$host$request_uri;
        }
        proxy_pass http://client;
    }

    location /api {
        if ($http_x_forwarded_proto != 'https') {
            return 301 https://$host$request_uri;
        }
        rewrite /api/(.*) /$1 break;
        proxy_pass http://api;
    }
}

最近,当我尝试启动容器时,出现以下错误:
nginx_1   | 2019/08/08 18:11:12 [emerg] 1#1: host not found in upstream "client:3000" in /etc/nginx/conf.d/default.conf:2
nginx_1   | nginx: [emerg] host not found in upstream "client:3000" in /etc/nginx/conf.d/default.conf:2

知道为什么 nginx 无法找到上游吗?

我尝试将链接添加到 nginx 设置块,如下所示:
  nginx:
    restart: always
    build:
      dockerfile: Dockerfile.dev
      context: ./nginx
    links:
      - client:client
      - api:api
    ports:
      - '8080:80'

我也尝试过“depends_on”而不是链接。添加链接后,nginx 不再提示并以代码 0 退出。但是当我访问 localhost:8080 时,
它给出了一个 301 重定向到 https://localhost .

非常感谢任何帮助或指导!!!

最佳答案

您应该检查您的服务的名称。 Docker compose 将在名为 [YOUR_PROJECT_NAME]_api_1 的 pod 中启动您的服务 api。仅启动 api 和客户端并检查 docker ps 的输出.您应该列出 pod 名称。

在较新的 docker_compose 语法版本中,您可以使用 link_external 将 [YOUR_PROJECT_NAME]_api_1 映射到 api。

关于docker - Nginx 在多容器 docker compose 设置中找不到上游主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57419116/

相关文章:

ruby-on-rails - 您必须将 Bundler 2 或更高版本与此锁定文件一起使用。在本地运行 docker-compose up 时

jenkins - Rancher 性能(Docker 中的 Docker?)

docker - 无法拉取 docker 镜像 - 找不到存储库

docker - 没有名称为 `apoc.periodic.iterate`的过程

docker - GitLab runner docker executor 通过 IP 地址回调 gitlab 服务器

nginx - Nginx 中的 301 重写永久重定向

SSL:错误:0B080074:x509 证书例程:X509_check_private_key: key 值不匹配

Azure devops 管道 : Cannot find Docker Image when Pushing to Azure Registry, 'tag ***/appname'

asp.net-mvc - 如何让 ASP.NET MVC 站点在 Mono 上运行?

Docker 构建失败,来自 ubuntu 和 debian repos 的签名失败