Django, Docker и Pipenv - Ошибка при добавлении новых пакетов, не переносимых из контейнера на локальный том - PullRequest
0 голосов
/ 31 марта 2020

Я продолжаю следовать книге «Django для профессионалов», но сталкиваюсь с той же проблемой, с которой автор книги столкнулся в этом вопросе. Я использую его на windows, поэтому с Docker -toolbox и, кажется, происходит следующее: после запуска

    docker-compose exec web pipenv install psycopg2-binary==2.8.4

файл Pipfile.lock изменился внутри контейнера, но он не переносится / syn c это для моих локальных файлов, кажется, что «том» потерял след файла?

Я открыл Pipfile.lock внутри контейнера, чтобы убедиться, что он действительно добавил psycopg2, который он сделал, но когда я docker-compose down это не в моем локальном Pipfile.lock и, следовательно, потерял в следующий раз, когда я использую docker-compose up -d --build

Единственное решение, которое я нашел до сих пор, это скопировать файл поверх из работающего контейнера docker в мою локальную папку, с которой далеко не идеально

    docker cp web:/code/Pipfile.lock . 

вывод из docker-compose exec web pipenv install psycopg2-binary==2.8.4

    E:\Documenten\websites\code\postgresql>docker-compose exec web pipenv install                                 
    psycopg2-binary==2.8.4
    Installing psycopg2-binary==2.8.4…
    Adding psycopg2-binary to Pipfile's [packages]…
    ✔ Installation Succeeded
    Installing dependencies from Pipfile.lock (a06fa0)…
    ?   ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 5/5 — 00:00:09
    To activate this project's virtualenv, run pipenv shell.
    Alternatively, run a command inside the virtualenv with pipenv run.

docker -compose.yml

    version: '3.7'

    services:
      web:
        build: .
        command: python manage.py runserver 0.0.0.0:8000
        volumes:
          - .:/code
        ports:
          - 8000:8000
        depends_on:
          - db
      db:
        image: postgres:11
        environment:
          - "POSTGRES_HOST_AUTH_METHOD=trust"

Dockerfile

    # Pull base image
    FROM python:3.7-slim

    # Set environment variables
    ENV PYTHDONTWRITEBYTECODE 1
    ENV PYTHONUNBUFFERED 1

    # Set work directory
    WORKDIR /code

    # Install dependencies
    COPY Pipfile Pipfile.lock /code/
    RUN pip install pipenv && pipenv install --system

    # Copy project
    COPY . /code/

    # Make executable
    RUN chmod +x /code/manage.py
...