Ron*_*ang 4 proxy nginx amazon-ec2 docker
我的 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;
}
}
Run Code Online (Sandbox Code Playgroud)
这是 nginx 代理的 Dockerfile:
FROM nginx:alpine
RUN rm /etc/nginx/conf.d/*
COPY proxy.conf /etc/nginx/conf.d/
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
当您的两个容器都在运行并且您已正确公开 NGINX 容器所需的端口时。您尚未公开test-app容器的任何端口。NGINX 容器无法与其对话。在您的情况下,直接公开端口docker run可能会破坏使用反向代理的意义。因此,在这种情况下您应该做的是为两个 Docker 容器创建一个网络,然后将它们添加到其中。然后他们将能够通过一座桥相互沟通。例如:
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
Run Code Online (Sandbox Code Playgroud)
现在您的两个 pod 都位于同一网络上,Docker 将通过容器名称在它们之间启用基于 DNS 的服务发现,您将能够相互解析它们。您可以像这样测试连接性:docker exec -it nginx-proxy ping test-app。好吧,所提供的内容ping已安装在 Docker 容器中。
| 归档时间: |
|
| 查看次数: |
8931 次 |
| 最近记录: |