Dockerfile не запускает команду python - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть такой файл Docker:

FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
ADD reports /code/
RUN pip install -r requirements.txt
ADD . /code/
RUN ls -l /code/reports/report/manage.py  # gives expected result
RUN ls -l /code/reports/build_static/  # gives expected result
RUN python /code/reports/report/manage.py build full_report.views.RenderView  # does not work

Все отлично работает, кроме последней команды , которая запускает пакет python (django-bakery) через manage.py build. Я не получаю никаких ошибок.

Эта команда должна выводить некоторые файлы внутри директории build_static в контейнере.

Если я ssh в контейнер и запускаю команду вручную, то она работает . Я вставил полный путь с /code/, чтобы убедиться, что они совпадают, и заранее создал все необходимые каталоги.

Вот как я строю контейнер:

docker-compose run django /bin/bash

Это мой docker-compose:

version: '3'

services:
  django:
    build: .
    volumes:
      - .:/code
    ports:
      - "8000:8000"

Интересно, как это работает, когда я запускаю команду вручную через bash внутри контейнера, но не работаю с командой в файле docker.

Спасибо!

Обновление (кажется, что файлы созданы, но если я проверю их, их там нет):

Step 12/12 : RUN ls -l /code/reports/build_static/
 ---> Running in e294563d26d5
total 11080
-rw-r--r-- 1 root root 11339956 Apr 30 10:53 index.html
drwxr-xr-x 7 root root     4096 Apr 30 10:53 static
Removing intermediate container e294563d26d5
 ---> b8e72da8ee5c
Successfully built b8e72da8ee5c
Successfully tagged image_django:latest
WARNING: Image for service django was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
root@7483853ecc45:/code# ls -l reports/build_static/
total 0

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Попробуйте выполнить следующие шаги и дайте мне знать вывод:

FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
ADD reports /code/
RUN pip install -r requirements.txt
ADD . /code/
RUN ls -l /code/reports/report/manage.py  # gives expected result
RUN ls -l /code/reports/build_static/  # gives expected result
RUN python /code/reports/report/manage.py build full_report.views.RenderView  
RUN ls -l /code/reports/build_static/  # should give you expected list of files

Дайте мне вывод для последнего шага. Я помогу вам, основываясь на результатах.

0 голосов
/ 30 апреля 2018

Следующий Dockerfile копирует содержимое вашего текущего каталога в папку code (если она не существует, он ее создает), а затем устанавливает его как рабочий каталог.

Инструкция WORKDIR устанавливает рабочий каталог для любого RUN, CMD, Инструкции ENTRYPOINT, COPY и ADD, следующие за ним в Dockerfile

Затем, чтобы максимально уменьшить размер изображения вашего докера, мы объединяем все ваши команды в одну команду RUN, чтобы уменьшить количество слоев.

FROM python:3

ENV PYTHONUNBUFFERED 1

COPY . /code
WORKDIR /code

RUN pip install -r requirements.txt && \
    ls -l reports/report/manage.py && \
    ls -l reports/build_static/ && \
    python reports/report/manage.py build full_report.views.RenderView

Я не пробовал его с полным примером приложения Django, но это должно помочь вам сузить проблему!

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