用于python 3.5的pyramid应用程序的正确Dockerfile语法?
我想在Docker容器中运行一个金字塔应用程序,但我在Dockerfile中正确地使用了语法。金字塔没有官方的Dockerfile,但我发现这个网站建议使用Ubuntu基本映像。 https://runnable.com/docker/python/dockerize-your-pyramid-application用于python 3.5的pyramid应用程序的正确Dockerfile语法?
但是这是为Python 2.7。任何想法,我可以改变这个3.5?这是我的尝试:
Dockerfile FROM ubuntu:16.04
RUN apt-get update -y && \
apt-get install -y python3-pip python3-dev && \
pip3 install --upgrade pip setuptools
# We copy this file first to leverage docker cache
COPY ./requirements.txt /app/requirements.txt
WORKDIR /app
RUN pip3 install -r requirements.txt
COPY . /app
ENTRYPOINT [ "python" ]
CMD [ "pserve development.ini" ]
,并运行此命令行:docker build -t testapp .
,但产生这种
FileNotFoundError: [Errno 2] No such file or directory: '/usr/local/lib/python3.5/dist-packages/appdirs-1.4.3.dist-info/METADATA' The command '/bin/sh -c pip3 install -r requirements.txt' returned a non-zero code: 2
而且即使没有建立,如何结束错误的转换将执行在3.5而不是2.7?我尝试修改Dockerfile来创建一个虚拟环境来强制执行在3.5,但仍然没有运气。对于它的价值,这在我的3.5虚拟环境的机器上工作得很好。
那么,任何人都可以帮助我构建正确的Dockerfile,以便我可以使用Python 3.5运行此Pyramid应用程序?我没有结婚到Ubuntu的形象。
如果有帮助,这里是我们使用Docker开发的金字塔应用程序的Dockerfile。尽管如此,它并没有在Docker的生产环境中运行。
FROM python:3.5.2
ADD . /code
WORKDIR /code
ENV PYTHONUNBUFFERED 0
RUN echo deb http://apt.postgresql.org/pub/repos/apt/ jessie-pgdg main >> /etc/apt/sources.list.d/pgdg.list
RUN wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
RUN apt-get update
RUN apt-get install -y \
gettext \
postgresql-client-9.5
RUN pip install -r requirements.txt
RUN python setup.py develop
正如你可能会注意到的,我们使用Postgres和gettext,但是你可以安装你需要的任何依赖。
该行ENV PYTHONUNBUFFERED 0
我想我们补充说,因为Python会缓冲所有的输出,所以没有什么会被打印在控制台。
现在我们使用Python 3.5.2。我们尝试了一个更近的版本,但我们遇到了问题。也许现在已经修好了。
而且,如果可以帮助,这里的docker-compose.yml
文件的编辑版本:
version : '2'
services:
db:
image: postgres:9.5
ports:
- "15432:5432"
rabbitmq:
image: "rabbitmq:3.6.6-management"
ports:
- '15672:15672'
worker:
image: image_from_dockerfile
working_dir: /code
command: command_for_worker development.ini
env_file: .env
volumes:
- .:/code
web:
image: image_from_dockerfile
working_dir: /code
command: pserve development.ini --reload
ports:
- "6543:6543"
env_file: .env
depends_on:
- db
- rabbitmq
volumes:
- .:/code
我们做
docker build -t image_from_dockerfile .
,而不是在docker-compose.yml
直接传递Dockerfile路径构建映像因为我们对Web应用程序和工作人员使用相同的图像,所以我们必须在每次重建时重建两次。
而最后一件事,如果你对发展本地运行,像我们一样,你必须在控制台中运行
docker-compose run web python setup.py develop
一次,否则,你会得到这样的错误,如果应用程序是不是当你docker-compose up
可访问。发生这种情况是因为,当您使用代码装入卷时,会从映像中删除该卷,因此软件包文件(如.egg
)被“删除”。
的帮助下,谢谢!还有什么帮助解决了如何交互式地运行容器,以便我可以一行一行地调试导致问题的原因。 – Jonathan
如果你只在docker镜像中安装Python3,那么应用程序将不会运行在2.7 – jchysk