Skip to main content
 首页 » 编程设计

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

2024年10月01日40pengyingh

我制作了第一个 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 

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