【问题标题】:Docker Nginx: host not found in upstreamDocker Nginx:在上游找不到主机
【发布时间】:2020-07-08 10:44:15
【问题描述】:

我的 docker 应用程序在 aws EC2 实例中运行,我目前正在尝试使用 Nginx 将应用程序映射到外部 IP 地址。这是我正在运行的容器的快照:

我的测试应用程序是一个相当简单的应用程序,它显示一个静态 html 网站。我使用以下命令部署它:

docker run -d --name=test-app test-app

nginx-proxy 有以下 proxy.conf

server {
  listen 80;
  location / {
    proxy_pass http://test-app;
  }
}

这里是 nginx 代理的 Dockerfile:

FROM nginx:alpine

RUN rm /etc/nginx/conf.d/*

COPY proxy.conf /etc/nginx/conf.d/

nginx-proxy 使用以下命令运行: docker run -d -p 80:80 --name=nginx-proxy nginx-proxy

但是,nginx 容器永远不会运行,这里是我得到的错误日志

2020/03/27 15:55:19 [emerg] 1#1: host not found in upstream "test-app" in /etc/nginx/conf.d/proxy.conf:5
nginx: [emerg] host not found in upstream "test-app" in /etc/nginx/conf.d/proxy.conf:5

【问题讨论】:

    标签: docker nginx amazon-ec2 proxy


    【解决方案1】:

    当您的两个容器都在运行并且您已正确公开 NGINX 容器所需的端口时。您还没有为 test-app 容器公开任何端口。 NGINX 容器无法与之对话。直接使用docker run 公开端口可能会破坏在您的情况下使用反向代理的意义。因此,在这种情况下,您应该做的是为您的两个 Docker 容器创建一个Network,然后将它们添加到其中。然后他们将能够通过桥梁相互交流。例如:

    docker network create example
    docker run -d --network=example --name=test-app test-app
    docker run -d -p 80:80 --network=example --name=nginx-proxy nginx-proxy
    

    现在您的两个 pod 都在同一个网络上,Docker 将通过容器名称在它们之间启用基于 DNS 的service discovery,您将能够相互解析它们。您可以像这样测试连接性:docker exec -it nginx-proxy ping test-app。好吧,提供的 ping 安装在该 Docker 容器中。

    【讨论】:

    • 我添加了网络并且它工作正常。另外,感谢您提供测试连接性的提示。
    猜你喜欢
    • 2018-03-03
    • 2019-09-01
    • 2016-02-11
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    • 2021-04-21
    • 2017-07-31
    • 2018-02-06
    相关资源
    最近更新 更多