Создайте образ докера, способного прочитать том с помощью скрипта Python, и скомпилировать / выполнить его. - PullRequest
0 голосов
/ 18 октября 2019

Мне нужно создать образ докера, который сможет прочитать скрипт Python из существующего тома и скомпилировать его, а затем выполнить скрипт Python. Я уже создал том и скопировал в него скрипт Python. Том имеет только скрипт Python. Вот команды, которые я использовал для этого (я использую Docker Desktop с Windows 10 Educ):

docker volume create python-volume
docker run -d --rm --name dummy -v python-volume:/data-volume nginx
docker cp D:/Dockerfile/TD4/HelloWorld_p.py dummy:/data-volume/HelloWorld_p.py
docker stop dummy

Я пытался создать образ через Dockerfile, но он не работает. Вот файл Dockerfile:

FROM python:3

VOLUME python-volume

WORKDIR python-volume/data-volume

CMD ["python3", "HelloWorld_p.py"]

И затем я использовал эти команды для создания и запуска контейнера нового образа:

docker build -t python_p_test .
docker run python_p_test

В процессе сборки ошибок нет, ноКогда дело доходит до запуска контейнера нового созданного образа, он выдает мне эту ошибку:

python3: can't open file 'HelloWorld_p.py': [Errno 2] No such file or directory

В моем HelloWorld_p.py есть только две строки кода, которые:

import os

print("Hello World!")

Так что он должен отображать строку в PowerShell благодаря скрипту python и его выполнению. Но, как я пишу, Docker не может получить доступ или найти скрипт. Я думаю, что есть проблема с доступом к сценарию через том.

Какие ошибки я допустил?

PS: Извините за мой английский, я студент-француз.

Ответы [ 2 ]

0 голосов
/ 18 октября 2019

Путь python-volume/data-volume/HelloWorld_p.py не существует в вашем контейнере. Вот почему выскакивает ошибка.

Путь /data-volume/HelloWorld_p.py существует.

Попробуйте использовать WORKDIR data-volume в вашем Dockerfile вместо WORKDIR python-volume/data-volume

Вы также можете скопироватьHelloWorld_p.py к изображению с помощью инструкции COPY без использования томов:

FROM python:3
COPY D:/Dockerfile/TD4/HelloWorld_p.py /HelloWorld_p.py    
CMD ["python3", "/HelloWorld_p.py"]
0 голосов
/ 18 октября 2019

Все правильно. Когда вы делаете -v [this]: [that], так [this] становится [этим] в вашем контейнере Docker. Поэтому, когда вы делаете WORKDIR python-volume/data-volume, это неправильно, поскольку в вашем контейнере нет такой папки python-volume. Что вам нужно сделать, это WORKDIR /data-volume

Это должно определенно работать. Кроме того, если вы указываете -v в команде docker run -d --rm --name dummy -v python-volume:/data-volume nginx, я не думаю, что вам нужно указывать том в Dockerfile. Кажется излишним по моему мнению. Но попробуйте, это должно работать!

Вот Dockerfile

FROM python:3

VOLUME python-volume

WORKDIR /data-volume

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