我在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
答案 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.ini和Dockerfile配置。它基于uwsgi文档中的示例,使用wsgi-file
和callable
参数来启动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。