gpt4 book ai didi

docker - 使用Nginx和Dockerize flask应用程序进行Python应用程序部署

转载 作者:行者123 更新时间:2023-12-02 21:34:00 24 4
gpt4 key购买 nike

我想在我的VPS上部署flask应用程序。我想出了没有docker的简单方法,但是现在我将docker化了该应用程序,并使用docker-composer.yml运行它。

services:                                                                      │
myapp: │
build: ./myapp │
container_name: myapp │
restart: always │
environment: │
- APP_NAME = myapp │
expose: │
- 8081
所以我改变了我的nginx conf
   location / {
include uwsgi_params;
uwsgi_pass unix:/home/username/path/to/socket/mysocker.sock;
}
 location / {
include uwsgi_params;
uwsgi_pass myapp:8081;
}
该应用程序正在使用docker composer运行,但是当我使用nginx -t在nginx中测试正确的设置时,出现此消息

nginx: [emerg] host not found in upstream "myapp" in/etc/nginx/sites-enabled/myapp:22│nginx: configuration file /etc/nginx/nginx.conf test failed


我非常确定,这意味着nginx找不到在docker中运行的myapp,并且无法与之通信,但是我公开了端口,据我了解,容器名称是主机名,因此它应该可以工作。
有谁知道如何使他们交流?我没有在互联网上找到任何教程,也不会对我不想做的nginx进行docker化。
任何帮助表示赞赏
编辑:
这是我的Dockerfile
FROM python:3.8.5-buster                                                     

WORKDIR /app

ADD . /app

RUN apt-get update -y && apt-get -y install curl && apt-get install libsasl2$
RUN pip3 install mysqlclient
RUN pip3 install blinker
RUN pip3 install pyOpenSSL
RUN pip3 install uwsgi
RUN pip3 install -r requirements.txt
CMD ["uwsgi", "myproject.ini", "--enable-threads"]
联合会
[uwsgi]                                                                                                                                                             
wsgi-file=wsgi.py
callable=app
socket=8081
module = wsgi:app
master = true
processes = 1
chmod-socket = 666
vacuum = true
harakiri = 120
die-on-term = true
解决方案
  • 将socket = 8081更改为socket = 0.0.0.0:8081
  • 更改nginx以在本地主机上监听:8081
  • 将端口8081:8081添加到docker-compose
  • 最佳答案

    Docker在容器内部的127.0.0.11上有内部DNS服务器。如果您的nginx不在容器中,则不能使用它来解析myapp名称。不过,您可以选择以下一种:

  • 使您的容器在主机的端口上侦听:

  • services:
    myapp:
    ports:
    # host:container
    - 8081:8081
    然后在您的nginx配置中反射(reflect)此更改:
     location / {
    include uwsgi_params;
    uwsgi_pass localhost:8081;
    }
  • 返回使用unix套接字,但是这次将套接字放入主机目录中。为此,首先将主机的/tmp装入容器:

  • services:
    myapp:
    volumes:
    # host:container
    - /tmp:/tmp
    然后配置您的应用程序以将套接字放入 /tmp。该套接字将出现在主机的 /tmp中,您可以配置nginx与之通信。如果不装载整个 /tmp,而是装载其中的单个目录,则可能会略有改善。例如 /tmp/myapp。这样,您就消除了容器会使主机文件混乱的机会。

    关于docker - 使用Nginx和Dockerize flask应用程序进行Python应用程序部署,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63896945/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com