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

我正在Python Flask的webapp上使用Docker,但是当我尝试运行它的时候出现错误。

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

python

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

 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日志$(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 

你的问题是你如何调用uwsgi。 你通过app.py的方式告诉app.py它是一个configuration文件,而不是一个python可调用的。

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

Uwsgi:快速入门烧瓶

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

(这意味着if __name__中的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"] 

避免同时使用ENTRYPOINT和CMD,直到您明确了解它们如何相互作用 。 如果有疑问,只需使用CMD。

这里有两个app.pyDockerfile的快速修复,它应该运行。

将任何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>