[英]AWS ECR, ECS based deployment: nginx: [emerg] host not found in upstream "app:9000" in /etc/nginx/conf.d/default.conf:2
[英]host not found in upstream in /etc/nginx/conf.d/nginx.conf when running standalone docker containers
我有两个名为-flask_server 和 nginx 的容器,当我使用 docker-compose 运行这些容器时,一切都按预期工作,问题是当我分别运行每个容器时,我收到此错误消息:
"host not found in upstream "flask_server:3000" in /etc/nginx/conf.d/nginx.conf".
我已经寻找了一个解决方案,我得出的结论是这是容器之间的网络问题。
所以当我像这样运行带有 --network 标志的容器时:
**flask_server**
docker run -p 3000:3000 --network custom-network flask_server
**nginx**
docker run -p 80:80 --network custom-network nginx
它仍然无法正常工作。
我让它工作的唯一方法是使用 --network-alias 标志运行flask_server容器,如下所示:
**flask_server**
docker run -p 3000:3000 --network custom-network --network-alias flask_server flask_server
**nginx**
docker run -p 80:80 --network custom-network nginx
所以现在我遇到了另一个问题,即我想将这些容器上传到 amazon ecs 并且我在任务定义中没有看到任何别名选项,所以我可能需要考虑另一种创造性的方法来解决这个问题在我将这些容器上传到 ecs 之前的问题。
配置文件
upstream flask_server {
server flask_server:3000;
}
server {
listen 80;
server_name default_server;
location /api {
proxy_pass http://flask_server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
nginx Dockerfile
FROM nginx
RUN rm /etc/nginx/conf.d/default.conf
COPY nginx.conf /etc/nginx/conf.d
烧瓶文件
FROM python
WORKDIR /app
COPY ./requirements.txt /app
RUN pip install -r requirements.txt
COPY . .
RUN apt-get update
RUN apt-get install python3-dev -y
WORKDIR /app/code
EXPOSE 3000
CMD ["gunicorn", "wsgi:app", "-k gevent" ,"-w 3", "-b 0.0.0.0:3000", "-t 30"]
希望这里的任何人都有另一种解决方法来解决容器之间的网络问题,或者有一种在 Amazon ECS 上使用 --network-alias 标志的方法。
任何帮助都会很棒。 谢谢 !
============ 编辑 ==============
所以我找到了解决这个问题的方法,而不是使用 flask_server 作为我的内部 ip 和代理传递给容器本身,我使用主机 ip 并将请求直接传递给主机 ip。
请注意,这仅在 flask_server 容器在 nginx 之前运行时才有效,以便将请求转发到 nginx 。
新建 nginx.conf 文件
server {
listen 80;
server_name default_server;
location /api {
# the host variable indicates the current host ip address
proxy_pass http://$host:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
我想连接到本地网络中的--network="host"
实例,您需要传递--network="host"
。
对于 ECS,您不能使用命名别名连接。 您需要通过公共 IP 连接或设置 VPC 并通过内部 IP 连接。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.