Докер и Джанго: Pytest не запускается - PullRequest
0 голосов
/ 11 ноября 2018

Я использую Docker для локальной загрузки моего проекта Django.Pytest отлично работает без Docker, но поскольку я использую Docker, выполнение команды в моем контейнере bash возвращает массу ошибок.

Мой docker-compose

version: '3'

    services:
      db:
        image: postgres
        ports:
          - "5432:5432"
      web:
        build: .
        env_file: .env
        volumes:
          - .:/code
        ports:
          - "8000:8000"
        depends_on:
          - db
        container_name: local

Dockerfile

# Pull base image
FROM python:3

# Set environment varibles
ENV PYTHONUNBUFFERED 1

# Set work directory
RUN mkdir /code
WORKDIR /code

# Install dependencies
RUN pip install --upgrade pip
RUN pip install pipenv
COPY ./Pipfile /code/Pipfile
RUN pipenv install --deploy --system --skip-lock --dev

# Define ENTRYPOINT
COPY ./docker-entrypoint.sh /docker-entrypoint.sh
RUN chmod +x /docker-entrypoint.sh
ENTRYPOINT ["/docker-entrypoint.sh"]

# Copy project
COPY . /code/

Первоначально я думал, что докер не позволяет pytest создавать тестовую базу данных.У вас когда-нибудь возникали проблемы с этим, и вы можете сказать мне, как это исправить?

Журнал консоли с ошибками>

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

Вы пропустили наиболее важную часть исключений, но, исходя из ошибок, я предполагаю, что вы не запустили миграцию базы данных, из-за которой в базе данных Postgres нет необходимых таблиц для тестов.

0 голосов
/ 11 ноября 2018

Какой образ контейнера вы используете для запуска кода Python? (кажется, отсутствует в вашем файле compose).

Исходя из предупреждений об устаревании, кажется, что вы вызываете несуществующий метод (т. Е. Callable - это None). Все ли зависимости установлены в вашем контейнере?

Кроме того, у вас есть DockerFile, который устанавливает все зависимости?

Что-то вроде:

# Use an official Python runtime as a parent image
FROM python:3.6-slim

# Set the working directory to /app
WORKDIR /app

# copy requirements.txt
ADD ./requirements.txt /app/requirements.txt

# Install any needed packages specified in requirements.txt
RUN pip install --trusted-host pypi.python.org -r requirements.txt

# Copy the current directory contents into the container at /app
ADD . /app

А затем в файле compose вы можете построить его так:

web:
  build:
    context: ./
    dockerfile: /path/to/Dockerfile
  command: cd /app/path/to/where/pytest/should/be/executed && pytest

Обратите внимание, что этот ответ не основан на томе, смонтированном на хосте, а скорее копирует ваш код в контейнер и создает образ, который можно использовать везде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...