Как разобрать том в Dockerfile для приложения, которое будет помещено на docker хаб - PullRequest
0 голосов
/ 12 марта 2020
FROM python:3

WORKDIR /Users/vaibmish/Documents/new/graph-report

RUN pip install graphreport==1.2.1

CMD [ cd  /Users/vaibmish/Documents/new/graph-report/graphreport_metrics ]
CMD [ graphreport ]

ЭТО ЧАСТЬ DCOKERFIILE

i wi sh, чтобы удалить тома cd из файла и выполнить команду типа -v, чтобы тот, кто работает который может дать свой собственный путь объема в том же

Ответы [ 2 ]

0 голосов
/ 12 марта 2020

Обычной практикой здесь является выбор некоторого фиксированного пути внутри контейнера Docker. Это должен быть путь, отличный от того, где установлено ваше приложение; ему вообще не нужно сопоставлять какой-либо конкретный путь к хосту.

FROM python:3
RUN pip3 install graphreport==1.2.1

WORKDIR /data
CMD ["graphreport"]
docker build -t me/graphreport:1.2.1 .
docker run --rm \
  -v /Users/vaibmish/Documents/new/graph-report:/data \
  me/graphreport:1.2.1

(Помните, что только последний CMD имеет эффект, и если это не правильно сформированный массив JSON , Docker будет интерпретировать ее как команду оболочки. То, что вы показываете в вопросе, будет запускать команду test (1), а не программу, которую вы устанавливаете.)


Если вы пытаетесь установить один пакет из PyPI и просто запустить его для локальных файлов, виртуальную среду Python будет намного проще настроить, чем любую основанную на Docker, и она будет работать, как вы ожидаете:

python3 -m venv graphreport
. graphreport/bin/activate
pip3 install graphreport==1.2.1

cd /Users/vaibmish/Documents/new/graph-report
graphreport

deactivate  # switch back to system Python/pip

Весь установленный код Python находится в каталоге виртуальной среды graphreport, и если вам больше не нужно это приложение, вы можете просто удалить дерево каталогов.

0 голосов
/ 12 марта 2020

Линия

CMD [ cd  /Users/vaibmish/Documents/new/graph-report/graphreport_metrics ]

неверна. Вы достигаете того же с WORKDIR:

WORKDIR  /Users/vaibmish/Documents/new/graph-report/graphreport_metrics

WORKDIR создает путь, если он не существует, а затем изменяет текущий каталог на этот путь (так же, как mkdir -p /path/new && cd /path/new)

Вы можете также объявите путь как том и укажите, кто запускает контейнер, чтобы указать свой собственный путь (docker run -v host_path: container_path ...)

VOLUME /Users/vaibmish/Documents/new/graph-report

Последнее замечание: похоже на эти пути от хозяина. Помните, что пути в Dockerfile не являются путями хоста. Это пути внутри контейнера.

...