运行Docker镜像给出:无法从app.py加载配置

时间:2017-04-25 06:28:45

标签: python docker flask uwsgi

我在Python Flask webapp上使用Docker,但在尝试运行时遇到错误。

$ sudo docker run -t imgcomparer6
unable to load configuration from app.py

的Python

在我的app.py文件中,我在webapp中唯一的app.run()实例位于 '__main__':函数内(见here

if __name__ == '__main__':
    app.run(host="127.0.0.1", port=int("8000"), debug=True)

Dockerfile

FROM ubuntu:latest

#Update OS
RUN sed -i 's/# \(.*multiverse$\)/\1/g' /etc/apt/sources.list
RUN apt-get update
RUN apt-get -y upgrade

# Install Python
RUN apt-get install -y python-dev python-pip


RUN mkdir /webapp/

# Add requirements.txt
ADD requirements.txt /webapp/
ADD requirements.txt .

# Install uwsgi Python web server
RUN pip install uwsgi

# Install app requirements
RUN pip install -r requirements.txt


# Create app directory
ADD . /webapp/

# Set the default directory for our environment
ENV HOME /webapp/
WORKDIR /webapp/

# Expose port 8000 for uwsgi
EXPOSE 8000


ENTRYPOINT ["uwsgi", "--http", "127.0.0.1:8000", "--module", "app:app", "--processes", "1", "--threads", "8"]
#ENTRYPOINT ["python"]
CMD ["app.py"]

目录结构

app.py
image_data.db
README.txt
requirements.txt
Dockerfile
templates
 - index.html
static/
 - image.js
 - main.css
 img/
   - camera.png
 images/
   - empty

编辑:

Docker图片

castro@Ezri:~/Desktop/brian_castro_programming_test$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
imgcomparer6        latest              d2af1b18ec87        59 minutes ago      430 MB
imgcomparer5        latest              305fa5062b41        About an hour ago   430 MB
<none>              <none>              e982e54b011a        About an hour ago   430 MB
imgcomparer2        latest              c7e3ad57be55        About an hour ago   430 MB
imgcomparer         latest              a1402ec1efb1        About an hour ago   430 MB
<none>              <none>              8f5126108354        14 hours ago        425 MB
flask-sample-one    latest              9bdc51fa4d7c        23 hours ago        453 MB
ubuntu              latest              6a2f32de169d        12 days ago         117 MB

图像记录(出错)

sudo docker logs imgcomparer6
Error: No such container: imgcomparer6

尝试运行此操作,如下所示:

'$ sudo docker run -t imgcomparer6; sudo docker logs $(docker ps -lq)'

unable to load configuration from app.py
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.27/containers/json?limit=1: dial unix /var/run/docker.sock: connect: permission denied
"docker logs" requires exactly 1 argument(s).
See 'docker logs --help'.

Usage:  docker logs [OPTIONS] CONTAINER

Fetch the logs of a container

ps -a

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
e80bfd0a3a11        imgcomparer6        "uwsgi --http 127...."   54 minutes ago      Exited (1) 54 minutes ago                       musing_fermat
29c188ede9ba        imgcomparer6        "uwsgi --http 127...."   54 minutes ago      Exited (1) 54 minutes ago                       kind_jepsen
a58945d9cd86        imgcomparer6        "uwsgi --http 127...."   55 minutes ago      Exited (1) 55 minutes ago                       musing_wright
ca70b624df5e        imgcomparer6        "uwsgi --http 127...."   55 minutes ago      Exited (1) 55 minutes ago                       brave_hugle
964a1366b105        imgcomparer6        "uwsgi --http 127...."   55 minutes ago      Exited (1) 55 minutes ago                       clever_almeida
155c296a3dce        imgcomparer6        "uwsgi --http 127...."   2 hours ago         Exited (1) 2 hours ago                          jovial_heisenberg
0a6a3bb55b55        imgcomparer5        "uwsgi --http 127...."   2 hours ago         Exited (1) 2 hours ago                          sharp_mclean
76d4f40c4b82        e982e54b011a        "uwsgi --http 127...."   2 hours ago         Exited (1) 2 hours ago                          kind_hodgkin
918954bf416a        d73c44a6c215        "/bin/sh -c 'mkdir..."   2 hours ago         Exited (1) 2 hours ago                          amazing_bassi
205276ba1ab2        d73c44a6c215        "/bin/sh -c 'mkdir..."   2 hours ago         Exited (1) 2 hours ago                          distracted_joliot
86a180f071c6        d73c44a6c215        "/bin/sh -c '#(nop..."   2 hours ago         Created                                         goofy_torvalds
fc1ec345c236        imgcomparer2        "uwsgi --http 127...."   2 hours ago         Created                                         wizardly_boyd
b051d4cdf0c6        imgcomparer         "uwsgi --http 127...."   2 hours ago         Created                                         jovial_mclean
ed78e965755c        d73c44a6c215        "/bin/sh -c '#(nop..."   3 hours ago         Created                                         elated_shirley
a65978d30c8f        d73c44a6c215        "/bin/sh -c '#(nop..."   3 hours ago         Created                                         vigilant_wright
760ac5a0281b        d73c44a6c215        "/bin/sh -c '#(nop..."   3 hours ago         Created                                         xenodochial_heyrovsky
9d7d8bcb2226        d73c44a6c215        "/bin/sh -c '#(nop..."   3 hours ago         Created                                         sleepy_noyce
36012d4c6115        d73c44a6c215        "/bin/sh -c '#(nop..."   3 hours ago         Created                                         adoring_hypatia
deacab89f416        d73c44a6c215        "/bin/sh -c '#(nop..."   3 hours ago         Created                                         objective_franklin
43e894f8fb9c        d73c44a6c215        "/bin/sh -c '#(nop..."   3 hours ago         Created                                         sleepy_hodgkin
2d190d0fc6e5        d73c44a6c215        "/bin/sh -c '#(nop..."   3 hours ago         Created                                         modest_hoover
b1640a039c31        d73c44a6c215        "/bin/sh -c '#(nop..."   3 hours ago         Created                                         affectionate_galileo
baf94cf2dc6e        d73c44a6c215        "/bin/sh -c '#(nop..."   3 hours ago         Created                                         affectionate_elion
2b54996907b6        d73c44a6c215        "/bin/sh -c '#(nop..."   3 hours ago         Created                                         elastic_wiles
663d4e096938        8f5126108354        "/bin/sh -c 'pip i..."   15 hours ago        Exited (1) 15 hours ago                         admiring_agnesi

2 个答案:

答案 0 :(得分:0)

以下是 app.py Dockerfile 的两个快速修复程序,它应该运行。

127.0.0.1引用更改为0.0.0.0。 Docker绑定0.0.0.0上的端口。

    app.run(host="0.0.0.0", port=int("8000"), debug=True)

对于Dockerfile,您可以使用CMD和/或ENTRYPOINT在容器启动时运行命令,但在这种情况下,您不需要两者。这将有效:

CMD exec uwsgi --http 0.0.0.0:8000 --module app:app --processes 1 --threads 8

然后:

docker build .
docker run -p 8000:8000 <image>

答案 1 :(得分:0)

你的问题在于如何调用uwsgi。你传递app.py的方式告诉uwsgi它是一个配置文件,而不是python可调用的。

我更喜欢使用ini文件来配置uwsgi,因为它比向Dockerfile添加一堆命令行选项更清晰。如果您遇到问题,请参阅相关文档,了解如何部署flask和uwsgi。

Uwsgi: Quickstart Flask

这是一个示例uwsgi.ini和Dockerfile配置。它基于uwsgi文档中的示例,使用wsgi-filecallable参数来启动flask wsgi函数。无论你是否在docker中运行,这都应该是一样的。

(这意味着app.py中的if __name__块无法使用

uwsgi.ini:

[uwsgi]
socket = 0.0.0.0:8000
chdir = /webapp/
wsgi-file = app.py
callable = app
...

Dockerfile:

... 
# no ENTRYPOINT, use only CMD
CMD ["uwsgi", "/webapp/uwsgi.ini"]

在完全理解how they interact之前,请避免同时使用ENTRYPOINT和CMD。如果有疑问,只需使用CMD。