Docker-compose создает приложение и копирует не предназначенный для содержимого каталог, указанный в dockerfile - PullRequest
0 голосов
/ 18 мая 2019

Я пытаюсь контейнировать две службы, службу сокетов и приложение django

Моя файловая структура:

\main file {docker-compose file} 
   \ django application {Dockerfile}
   \ socket app {Dockerfile}

Когда я запускаю docker build ., он создает образ, а затемзапустите docker-compose build, я заметил, что приложение сокета и приложение django копируются в контейнер, а не только приложение django, как указано в Dockerfile.

Я понял, что файл Docker выполняется в главном каталогевместо каталога django?

Вот Dockerfile, который находится внутри приложения django

# Pull base image
FROM python:3

# Set environment varibles
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# Set work directory
WORKDIR /code

# Install dependencies
COPY requirements.txt /code/
RUN pip install -r requirements.txt

# Copy project
COPY . /code/

RUN ls

А вот файл docker-compose.С помощью команды ls я попытался выяснить, что произошло, и в результате получается, что приложения в главной папке копируются вместо приложения django.

version: '3'
  services:
    db:
      image: postgres:10.1-alpine
      volumes:
        - postgres_data:/var/lib/postgresql/data/
    web:
      build: ./django_app
      command: ls /code/
      volumes:
        - .:/code
      ports:
        - 8000:8000
      depends_on:
        - db

  volumes:
    postgres_data:

это предназначенное использование или я делаючто-то не так?

1 Ответ

1 голос
/ 18 мая 2019

Директива volumes: в вашем файле docker-compose.yml скрывает буквально все, что делает ваш Dockerfile.Вы решите свою непосредственную проблему, изменив две соответствующие директории: в директиве volumes:, bind-mount ./django_app:/code.

В более ориентированном на производство рабочем процессе, я бы порекомендовал сделать ваш DockerИзображение полностью автономно: убедитесь, что оно имеет CMD, которое запускает ваше приложение, и не используйте volumes: для внедрения кода.Удалите command: и volumes: из docker-compose.yml и позвольте изображению предоставить свой собственный код и команду по умолчанию.(Для разработки используйте виртуальную среду Python для локальной изоляции кода и убедитесь, что все ваши тесты и базовый рабочий процесс пройдены вручную, прежде чем использовать Docker.)

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