簡體   English   中英

運行獨立 docker 容器時,在 /etc/nginx/conf.d/nginx.conf 上游中找不到主機

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM