当前位置: 首页 > 知识库问答 >
问题:

由uWSGI提供的应用程序与Docker的主管

柳项明
2023-03-14

我正在尝试使用Docker的uWSGI为Django应用程序提供服务。我正在使用supervisord在Dockerfile的末尾为我启动流程。当我运行图像时,它说uWSGI进程启动并成功,但我无法在我认为会显示它的URL处查看应用程序。也许我没有正确设置/配置东西?

我现在没有启动nginx,因为我目前正在通过Amazon S3提供静态文件,并且希望首先专注于启动和运行wsgi。

通过执行uwsgi--init uwsgi.ini:local,我成功地在本地运行了使用uwsgi的应用程序,但在将其移动到docker中时遇到了问题。

这是我的文件

FROM ubuntu:14.04

# Get most recent apt-get
RUN apt-get -y update

# Install python and other tools
RUN apt-get install -y tar git curl nano wget dialog net-tools build-essential
RUN apt-get install -y python3 python3-dev python-distribute
RUN apt-get install -y nginx supervisor
# Get Python3 version of pip
RUN apt-get -y install python3-setuptools
RUN easy_install3 pip

RUN pip install uwsgi

RUN apt-get install -y python-software-properties

# Install GEOS
RUN apt-get -y install binutils libproj-dev gdal-bin

# Install node.js
RUN apt-get install -y nodejs npm

# Install postgresql dependencies 
RUN apt-get update && \
    apt-get install -y postgresql libpq-dev && \
    rm -rf /var/lib/apt/lists

ADD . /home/docker/code

# Setup config files
RUN echo "daemon off;" >> /etc/nginx/nginx.conf
RUN rm /etc/nginx/sites-enabled/default
RUN ln -s /home/docker/code/nginx-app.conf /etc/nginx/sites-enabled/
RUN ln -s /home/docker/code/supervisor-app.conf /etc/supervisor/conf.d/

RUN pip install -r /home/docker/code/app/requirements.txt

EXPOSE 8080

CMD ["supervisord", "-c", "/home/docker/code/supervisor-app.conf", "-n"]

这是我的uwsgi.ini

[uwsgi]
# this config will be loaded if nothing specific is specified
# load base config from below
ini = :base

# %d is the dir this configuration file is in
socket = %dmy_app.sock
master = true
processes = 4

[dev]
ini = :base
# socket (uwsgi) is not the same as http, nor http-socket
socket = :8001


[local]
ini = :base
http = :8000
# set the virtual env to use
home=/Users/my_user/.virtualenvs/my_env


[base]
# chdir to the folder of this config file, plus app/website
chdir = %dmy_app/
# load the module from wsgi.py, it is a python path from 
# the directory above.
module=my_app.wsgi:application
# allow anyone to connect to the socket. This is very permissive
chmod-socket=666
http = :8080

这是我的supervisor-app.conf档案

[program:app-uwsgi]
command = /usr/local/bin/uwsgi --ini /home/docker/code/uwsgi.ini

在使用boot2docker的MAC上,我试图访问$(boot2docker ip):8080的应用程序

最终,我想将这个容器上传到AWS Elastic Beanstalk,不仅运行uWSGI进程,还运行芹菜工人。

当我运行我的容器时,我可以从日志中看到supervisor和uwsgi都成功启动了。我能够在我的本地机器上运行东西,既可以使用uwsgi本身,也可以通过supervisor使用uwsgi,但由于某种原因,当我将东西装箱时,我在任何地方都找不到它。

这是我启动docker容器时记录的内容

2014-12-25 15:08:03,950 CRIT Supervisor running as root (no user in config file)
2014-12-25 15:08:03,953 INFO supervisord started with pid 1
2014-12-25 15:08:04,957 INFO spawned: 'uwsgi' with pid 9
2014-12-25 15:08:05,970 INFO success: uwsgi entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)

共有1个答案

廖琪
2023-03-14

你是怎么启动docker容器的?

我看不到任何CMD或ENTRYPOINT脚本,所以我不清楚任何东西是如何开始的。

一般来说,我建议避免像supervisord这样的事情,除非绝对必要,只要从CMD行在前台启动uWSGI即可。尝试将以下内容添加为Dockerfile中的最后一行:

CMD ["/usr/local/bin/uwsgi", "--ini", "/home/docker/code/uwsgi.ini"]

然后运行docker run-p 8000:8000image_name。你应该从uWSGI得到一些回复。如果可行,我建议您移动其他服务(postgres,节点,到单独的容器)。有Node、Python和Postgres的官方图像,这应该会节省你一些时间。

请记住,Docker容器只在其主进程(必须在前台)的时间内运行。

 类似资料:
  • 问题内容: 有人可以向我解释差异吗? Provisioner-在docker中安装,运行,拉出容器中的一项工作。 提供程序-是运行VM的东西。即VBox运行ubuntu OS映像。 Docker如何成为提供者?它直接运行一些docker镜像吗?如果我在Windows上,必须有一些boot2docker的隐藏用法,对不对?我什么时候使用每个? 问题答案: Docker Provisioner帮助准备

  • 下面是我的app.js文件 下面是我的状态文件 我有一个模板,我想从那里导航到下一个状态 但是只要我点击这个锚标签,它就会把我导航回主页。(不去我打算去的州)。主要问题是URL(我猜)任何帮助都会很感激。

  • 问题内容: 弹簧配置文件示例: 和persistence.xml jpa文件: 如您所见,与jpa提供程序相关的信息已设置3次。在事务管理器bean,实体管理器工厂bean和持久性单元配置中: 但是实际上在我的项目中,我仅使用提供程序配置了持久性单元。而且有效。 所以我的问题是提供商,方言和卖方选项之间有什么区别?我必须全部设置它们,还是可以跳过其中一些?例如,我可以设置为EntityManger

  • 我正在使用Spring Security 4.0.1,并希望使用多个身份验证提供程序使用基于Java的配置进行身份验证。如何指定提供程序顺序? 我希望使用AuthenticationManagerBuilder,因为这就是<code>WebSecurityConfigurerAdapter。configureGlobal()公开,但我看不到任何指定顺序的方法。我需要手动创建ProviderMana

  • 我没有做任何更改,我只是运行“CreateReact应用程序客户端”,然后一切正常运行,我将cd放入目录并运行“ThreadStart”。然后我有两个问题:1)它说“有些东西已经在3000端口上运行了”。不幸的是,当我使用lsof和netstat时,端口3000上没有运行任何东西。我说在不同的端口上运行,然后它会尝试为应用程序提供服务。2) 新港口没有提供任何服务。浏览器将打开,控制台不会给出任何