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