[英]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.