如何使用 Docker 将图形工具附加到 Django

How to attach graph-tool to Django using Docker

我需要在我的 Django 项目中使用一些图形工具计算。所以我从 docker pull tiagopeixoto/graph-tool 开始,然后将它添加到我的 Docker-compose 文件中:

version: '3'

services:

  db:
    image: postgres

  graph-tool:
    image: dcagatay/graph-tool

  web:
    build: .
    command: python3 manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db
      - graph-tool

当我 up 我的 docker-compose 我得到一行:

project_graph-tool_1_87e2d144b651 exited with code 0

最后,当我的 Django 项目启动时,我无法从 graph-tool 导入模块,例如:

from graph_tool.all import *

如果我尝试直接在此 docker 图像中使用:

docker run -it -u user -w /home/user tiagopeixoto/graph-tool ipython

一切顺利。 我做错了什么以及如何修复它并最终将图形工具附加到 Django?谢谢!

与其为 graphtool 使用单独的 docker 图像,我认为最好在用于 Django 的 Dockerfile 中使用它。例如,更新您当前的 Dockerfile:

FROM ubuntu:16.04  # using ubuntu image

ENV PYTHONUNBUFFERED 1
ENV C_FORCE_ROOT true

# python3-graph-tool specific requirements for installation in Ubuntu from documentation
RUN echo "deb http://downloads.skewed.de/apt/xenial xenial universe" >> /etc/apt/sources.list && \
echo "deb-src http://downloads.skewed.de/apt/xenial xenial universe" >> /etc/apt/sources.list

RUN apt-key adv --keyserver pgp.skewed.de --recv-key 612DEFB798507F25

# Install dependencies
RUN apt-get update \
    && apt-get install -y python3-pip python3-dev \ 
    && apt-get install --yes --no-install-recommends --allow-unauthenticated python3-graph-tool \
    && cd /usr/local/bin \
    && ln -s /usr/bin/python3 python \
    && pip3 install --upgrade pip

# Project specific setups 
# These steps might be different in your project
RUN mkdir /code
WORKDIR /code
ADD . /code
RUN pip3 install -r requirements.pip

现在更新您的 docker-compose 文件:

version: '3'
services:
  db:
    image: postgres
  web:
    build: .
    container_name: djcon  # <-- preferred over generated name
    command: python3 manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db

就是这样。现在,如果您通过 docker exec -ti djcon bash(或任何生成的名称而不是 djcon)访问您的 web 服务的 shell,并访问 django shell 像这样 python manage.py shell。然后键入 from graph_tool.all import *,它不会抛出任何导入错误。