Контент контейнера не копируется на хост докера с использованием тома докера - PullRequest
0 голосов
/ 20 мая 2019

Я запускаю скрипт Python внутри контейнера, который генерирует файл output.txt. Я хочу запустить этот сценарий Python только один раз в контейнере, и файл output.txt должен быть доступен на моем хосте Docker, но выполняемый ниже файл команд тома docker не копируется.

Мой Dockerfile

[root@server test]# cat Dockerfile
FROM centos
RUN yum install -y https://centos7.iuscommunity.org/ius-release.rpm
RUN yum install -y python36u python36u-libs python36u-devel python36u-pip
RUN ln -sf /usr/bin/python3.6 /usr/bin/python
RUN mkdir /app
COPY 16-reading_and_writing_file.py /app
RUN python --version
CMD ["python", "/app/16-reading_and_writing_file.py"]

Мой скрипт на питоне

target3 = open("output.txt",'w')
line1 = "Hello"
line2 = "How Are You"
target3.write(line1)
target3.write("\n")
target3.write(line2)
target3.write("\n")
target3.close()
print ("Hello")

команда запуска Docker

[root@server test]# docker run -it -v /jaydeep/docker_practice/test/:/app jaydeepuniverse/jira
Hello
[root@server test]#

Мне нужно иметь файл output.txt здесь в томе пути докера, указанном в команде

[root@server test]# pwd
/jaydeep/docker_practice/test
[root@server test]# ls -ltrh
total 8.0K
-rwxr-xr-x 1 root root 183 May 17 08:25 16-reading_and_writing_file.py
-rw-r--r-- 1 root root 510 May 17 23:35 Dockerfile
[root@server test]#

Пожалуйста, сообщите.

Спасибо

1 Ответ

2 голосов
/ 20 мая 2019

Когда вы используете CMD ["python", "/app/16-reading_and_writing_file.py"], ваш текущий рабочий каталог - /.

Так что output.txt файл будет создан в /, а не в /app

Так что лучше использовать WORKDIR в вашем Dockerfile, чтобы упомянуть ваш рабочий каталог

FROM centos
RUN yum install -y https://centos7.iuscommunity.org/ius-release.rpm
RUN yum install -y python36u python36u-libs python36u-devel python36u-pip
RUN ln -sf /usr/bin/python3.6 /usr/bin/python
RUN mkdir /app
WORKDIR /app
COPY 16-reading_and_writing_file.py .
RUN python --version
CMD ["python", "16-reading_and_writing_file.py"]

Теперь файл будет создан под /app

OR

В своем коде Python вы можете использовать модуль os для формирования пути

import os

output_file_path  = os.path.join(os.path.abspath(__file__), 'output.txt')
target3 = open(output_file_path,'w')
line1 = "Hello"
line2 = "How Are You"
target3.write(line1)
target3.write("\n")
target3.write(line2)
target3.write("\n")
target3.close()
print ("Hello")

Это поможет вам создать output.txt в том же каталоге, где находится 16-reading_and_writing_file.py , независимо от того, где вы находитесь.

...