Docker-compose не отражает изменения втреках .txt - PullRequest
0 голосов
/ 23 февраля 2019

Изменения в моем requirements.txt не отражаются при запуске:

docker-compose -f docker-compose-dev.yml up -d

docker-compose-dev.yml

version: '3.6'

services:

  web:
    build:
      context: ./services/web
      dockerfile: Dockerfile-dev
    volumes:
      - './services/web:/usr/src/app'
    ports:
      - 5001:5000
    environment:
      - FLASK_ENV=development
      - APP_SETTINGS=project.config.DevelopmentConfig
      - DATABASE_URL=postgres://postgres:postgres@web-db:5432/web_dev 
      - DATABASE_TEST_URL=postgres://postgres:postgres@web-db:5432/web_test  
    depends_on:  
      - web-db

  web-db:  
    build:
      context: ./services/web/project/db
      dockerfile: Dockerfile
    ports:
      - 5435:5432
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres

  nginx:
    build:
      context: ./services/nginx
      dockerfile: Dockerfile-dev
    restart: always
    ports:
      - 80:80
    depends_on:
      - web
      - client

  client:
    build:
      context: ./services/client
      dockerfile: Dockerfile-dev
    volumes:
      - './services/client:/usr/src/app'
      - '/usr/src/app/node_modules'
    ports:
      - 3007:3000
    environment:
      - NODE_ENV=development
      - REACT_APP_WEB_SERVICE_URL=${REACT_APP_WEB_SERVICE_URL}
    depends_on:
      - web

Dockerfile-dev

# base image
FROM python:3.6-alpine

# install dependencies
RUN apk update && \
    apk add --virtual build-deps gcc python-dev musl-dev && \
    apk add libffi-dev && \
    apk add postgresql-dev && \
    apk add netcat-openbsd && \
    apk add bind-tools && \
    apk add --update --no-cache g++ libxslt-dev && \
    apk add jpeg-dev zlib-dev

ENV PACKAGES="\
    dumb-init \
    musl \
    libc6-compat \
    linux-headers \
    build-base \
    bash \
    git \
    ca-certificates \
    freetype \
    libgfortran \
    libgcc \
    libstdc++ \
    openblas \
    tcl \
    tk \
    libssl1.0 \
    "

ENV PYTHON_PACKAGES="\
    numpy \
    matplotlib \
    scipy \
    scikit-learn \
    nltk \
    " 

RUN apk add --no-cache --virtual build-dependencies python3 \
    && apk add --virtual build-runtime \
    build-base python3-dev openblas-dev freetype-dev pkgconfig gfortran \
    && ln -s /usr/include/locale.h /usr/include/xlocale.h \
    && python3 -m ensurepip \
    && rm -r /usr/lib/python*/ensurepip \
    && pip3 install --upgrade pip setuptools \
    && ln -sf /usr/bin/python3 /usr/bin/python \
    && ln -sf pip3 /usr/bin/pip \
    && rm -r /root/.cache \
    && pip install --no-cache-dir $PYTHON_PACKAGES \
    && pip3 install 'pandas<0.21.0' \
    && apk del build-runtime \
    && apk add --no-cache --virtual build-dependencies $PACKAGES \
    && rm -rf /var/cache/apk/*

# set working directory
WORKDIR /usr/src/app

# add and install requirements
COPY ./requirements.txt /usr/src/app/requirements.txt  # <--- refer to EDIT
RUN pip install -r requirements.txt

# add entrypoint.sh
COPY ./entrypoint.sh /usr/src/app/entrypoint.sh

RUN chmod +x /usr/src/app/entrypoint.sh

# add app
COPY . /usr/src/app

# run server
CMD ["/usr/src/app/entrypoint.sh"]

что мне не хватает?

РЕДАКТИРОВАТЬ

Как и принятый ответ в [ Docker, как запустить pip needs.txt, только если произошли изменения? , я уже копирую файл requirements.txt на отдельном этапе сборки перед добавлениемвсе приложение в образ , но, похоже, не работает.

Ответы [ 2 ]

0 голосов
/ 24 февраля 2019

Я думаю, что проблема, скорее всего, в том, что $ docker-compose up сам по себе не восстановит ваши изображения, если вы внесете изменения.Чтобы docker-compose включил ваши изменения в requirements.txt, вам нужно будет передать флаг --build на docker-compose.

Т.е. вместо этого запустите:

docker-compose -f docker-compose-dev.yml up --build -d

Что заставит docker-compose перестроить изображение.Однако это восстановит все изображения в файле docker-compose, которые могут быть или не быть желательными.

Если вы хотите перестроить образ только одного сервиса, вы можете сначала запустить docker-compose -f docker-compose-dev.yml build web, а затем просто запустить свою оригинальную команду docker-compose.

Дополнительная информация о buildкоманда здесь .

0 голосов
/ 23 февраля 2019

Попробуйте установить требования из скопированного файла

https://docs.docker.com/develop/develop-images/dockerfile_best-practices/

Это пример их Dockerfile

COPY requirements.txt /tmp/
RUN pip install --requirement /tmp/requirements.txt

Эточто у вас есть

RUN pip install -r requirements.txt

Затем, после того, как вы изменили файл Docker, вы должны остановить свой контейнер, удалить свой образ, построить новый и запустить контейнер из него.

Stopконтейнер и удалите изображение.

docker-compose down
docker-compose --rmi all

--rmi all - удаляет все изображения.Возможно, вы захотите использовать --rmi IMAGE_NAME

и запустить его (если вы не используете параметры по умолчанию, измените эти команды с вашими аргументами).

docker-compose up

Обновить

Если у вас запущен Docker, и вы не хотите останавливать его и перестраивать образ (если вы просто хотите установить пакет, выполнить несколько команд или даже запустить новое приложение), вы можете подключить контейнер из локальной сети.машина и команды командной строки.

docker exec -it [CONTAINER_ID] bash

Чтобы получить [CONTAINER_ID], запустите

docker ps

Примечание docker-compose ps даст вам имена контейнеров, но вам нужен идентификатор контейнера для sshконтейнер.

...