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