python - 调试容器化 Python Web 应用程序

标签 python docker wsgi docker-container turbogears2

我已经制作了第一个 docker 容器,它按照 Dockerfile 工作。

FROM python:3.5-slim

RUN apt-get update && \
    apt-get -y install gcc mono-mcs && \
        apt-get -y install vim && \
        apt-get -y install nano && \
            rm -rf /var/lib/apt/lists/*

RUN mkdir -p /statics/js

VOLUME ["/statics/"]

WORKDIR /statics/js

COPY requirements.txt /opt/requirements.txt

RUN pip install -r /opt/requirements.txt

EXPOSE 8080

CMD ["python", "/statics/js/app.py"]

运行此命令后:

docker run -it -p 8080:8080 -v ~/Development/my-Docker-builds/pythonReact/statics/:/statics/ -d ciasto/pythonreact:v2

当我打开页面localhost:8080时,我收到错误:

A server error occurred.  Please contact the administrator.

但是如果我运行this application通常,即不直接在我的主机上容器化:它工作正常。

所以我想知道是什么导致了服务器错误。如何调试通过容器运行的 python 应用程序以了解导致其无法工作的原因。或者我做错了什么。

最佳答案

主要是这个:

config.paths['static_files'] = 'statics'

应该是:

config.paths['static_files'] = '/statics'

我已经使用“Hello World”启动并运行了您的应用程序

做了这些改变吗:

1) 提到的config.paths['static_files'] = '/statics'

2)此 Dockerfile(删除了 VOLUME)

FROM python:3.5-slim

RUN apt-get update && \
    apt-get -y install gcc mono-mcs && \
    apt-get -y install vim && \
    apt-get -y install nano && \
        rm -rf /var/lib/apt/lists/*

COPY requirements.txt /opt/requirements.txt

RUN pip install -r /opt/requirements.txt

COPY ./statics/ /statics/
COPY app.py /app/app.py
WORKDIR /statics/js

EXPOSE 8080

CMD ["python", "/app/app.py"]

3) 将非静态 app.py 移动到适当的位置:项目的根目录。

4) 运行:docker build 。 -t pyapp,然后docker run -p 8080:8080 -it pyapp

您应该从终端输出中看到Serving on port 8080...。以及浏览器中的 Hello World

我已经 fork 了你的 Github 项目并做了 pull-request .


编辑:

如果您在开发时需要进行更改,请运行带有卷的容器以覆盖镜像中打包的应用程序。例如:

docker run -v ./static/js/:/static/js -p 8080:8080 -it pyapp

您可以拥有任意数量的卷,但应用程序已打包在镜像中并准备好推送到某个地方。

关于python - 调试容器化 Python Web 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44228536/

相关文章:

Windows 上的 Python - 编译

python - 如何将 reshape /展平的图像附加到Python列表而不消耗太多内存?

Django - 如何检查服务器是在 ASGI 还是 WSGI 模式下运行?

docker - Docker图多服务器部署

django - 在 Docker 容器中与 Django 和 Postgres 之间的连接苦苦挣扎

django - WSGIPassAuthorization On 不起作用

django:wsgi 导入设置错误名为 mysite.settings 的模块未找到

python - 如何在Python的 Elasticsearch 中搜索多个OR条件

python - 从 sql 脚本中提取模式

caching - Docker:如何在容器中安装memcached