#django #docker #dockerhub
Вопрос:
Я пытаюсь загрузить приложение Django в Docker Hub. На локальной машине (Ubuntu 18.04) все работает нормально, но в Docker Hub есть проблема, из-за которой requirements.txt файл не может быть найден.
Локальная машина:
sudo docker-compose build --no-cache
Результат (все в порядке):
Step 5/7 : COPY . .
---> 5542d55caeae
Step 6/7 : RUN file="$(ls -1 )" amp;amp; echo $file
---> Running in b85a55aa2640
Dockerfile db.sqlite3 hello_django manage.py requirements.txt venv
Removing intermediate container b85a55aa2640
---> 532e91546d41
Step 7/7 : RUN pip install -r requirements.txt
---> Running in e940ebf96023
Collecting Django==3.2.2....
Но, Докер Хаб:
Step 5/7 : COPY . .
---> 852fa937cb0a
Step 6/7 : RUN file="$(ls -1 )" amp;amp; echo $file
---> Running in 281d9580d608
README.md app config docker-compose.yml
Removing intermediate container 281d9580d608
---> 99eaafb1a55d
Step 7/7 : RUN pip install -r requirements.txt
---> Running in d0e180d83772
[91mERROR: Could not open requirements file: [Errno 2] No such file or directory: 'requirements.txt'
Removing intermediate container d0e180d83772
The command '/bin/sh -c pip install -r requirements.txt' returned a non-zero code: 1
приложение/Докерфайл
FROM python:3.8.3-alpine
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
WORKDIR /code
COPY . .
RUN file="$(ls -1 )" amp;amp; echo $file
RUN pip install -r requirements.txt
докер-композитор.yml
version: '3'
services:
web:
build:
context: app
dockerfile: Dockerfile
volumes:
- ./app/:/code/
ports:
- "8000:8000"
env_file:
- ./config/.env.dev
command: python manage.py runserver 0.0.0.0:8000
Структура проекта:
ОБНОВЛЕНИЕ: Докер строится с Github. Файл requirements.txt находится в репозитории GitHub (папка приложения), но по какой-то причине во время сборки Docker Hub копирует файлы из корневой папки проекта, а не содержимое папки приложения.
Комментарии:
1. Как вы запускаете или запускаете дело «Docker Hub»?
2. Можете ли вы поделиться с нами фактическим репозиторием github?
3. @larsks Github: github.com/sigalglebru/django-on-docker .
4. @DavidMaze Докер покупает с Github. Файл requirements.txt находится в репозитории GitHub (папка приложения), но по какой-то причине во время сборки Docker Hub копирует файлы из корневой папки проекта, а не содержимое папки приложения
Ответ №1:
Проблема в том, что вам нужно сообщить Docker Hub, где найти контекст сборки.
Когда вы запускаетесь docker-compose build
локально, docker-compose
считывает ваш docker-compose.yml
файл и знает, что нужно создавать внутри app
каталога, потому что вы явно задали контекст сборки:
build:
context: app
dockerfile: Dockerfile
При сборке в Docker Hub по умолчанию предполагается
, что контекст сборки является верхним уровнем вашего репозитория. Если вы зададите путь к
своему Dockerfile
, например, app/Dockerfile
, это эквивалентно
запуску:
docker build -f app/Dockerfile .
Если вы попробуете это сделать, вы увидите, что потерпите неудачу таким же образом. Вместо того , чтобы задавать
путь к Dockerfile
каталогу, вам нужно задать путь к контексту сборки
в app
каталоге. Например:
(Посмотрите на столбец «Контекст сборки»).
При правильной настройке ваш репозиторий создается на Docker Hub без ошибок.
Ответ №2:
Спасибо, я нашел решение:
Я просто скопировал файлы из./app на подключенный том и немного изменил контекст, но все еще не понимаю, почему это нормально работало на локальной машине
Докерфайл:
FROM python:3.8.3-alpine
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
WORKDIR /code
COPY ./app .
RUN pip install -r requirements.txt
докер-compose.yml
version: "3.6"
services:
python:
restart: always
build:
context: .
dockerfile: docker/Dockerfile
expose:
- 8000
ports:
- 8000:8000
command: "python manage.py runserver 0.0.0.0:8000"