Jon*_*han 1 ubuntu python-3.x pyramid dockerfile
我想在 docker 容器中运行金字塔应用程序,但我在 Dockerfile 中为正确的语法而苦苦挣扎。Pyramid 没有官方的 Dockerfile,但我发现这个网站推荐使用 Ubuntu 基础镜像。 https://runnable.com/docker/python/dockerize-your-pyramid-application
但这适用于 Python 2.7。任何想法如何将其更改为 3.5?这是我尝试过的:
文件
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] 没有那个文件或目录:'/usr/local/lib/python3.5/dist-packages/appdirs-1.4.3.dist-info/METADATA' 命令'/bin/sh -c pip3 install -r requirements.txt' 返回非零代码:2
即使确实构建了, pserve 将如何在 3.5 而不是 2.7 中执行?我尝试修改 Dockerfile 以创建一个虚拟环境以强制在 3.5 中执行,但仍然没有运气。就其价值而言,这在我的具有 3.5 虚拟环境的机器上运行良好。
那么,谁能帮我构建正确的 Dockerfile 以便我可以使用 Python 3.5 运行这个 Pyramid 应用程序?我没有嫁给 Ubuntu 图像。
如果这有帮助,这里是我们使用 Docker 开发的 Pyramid 应用程序的 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
Run Code Online (Sandbox Code Playgroud)
您可能会注意到,我们使用 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
Run Code Online (Sandbox Code Playgroud)
我们通过做来建立形象
docker build -t image_from_dockerfile .
Run Code Online (Sandbox Code Playgroud)
而不是在docker-compose.yml配置中直接传递 Dockerfile 路径,因为我们对 Web 应用程序和工作程序使用相同的图像,所以每次必须重建时我们都必须重建两次。
最后一件事,如果你像我们一样在本地运行进行开发,你必须运行
docker-compose run web python setup.py develop
Run Code Online (Sandbox Code Playgroud)
在控制台中一次,否则,您会收到一个错误,例如当您docker-compose up. 发生这种情况是因为当您安装包含代码的卷时,它会从映像中删除该卷,因此包文件(如.egg)被“删除”。
更新
您可以通过将目录包含在卷中来告诉 Docker 使用映像中的目录,而不是运行docker-compose run web python setup.py develop以在.egg本地生成.egg。
例如
volumes:
- .:/code
- /code/packagename.egg-info
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1728 次 |
| 最近记录: |