Docker Nginx:在上游找不到主机

时间:2020-03-27 16:38:48

标签: docker nginx amazon-ec2 proxy

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

enter image description here

我的test-app是一个相当简单的应用程序,它显示静态html网站。我使用以下命令进行了部署:

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

nginx代理具有以下 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

1 个答案:

答案 0 :(得分: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容器中。