позволить образу докера взаимодействовать с окружающей средой хоста - PullRequest
1 голос
/ 10 ноября 2019

Мне действительно нужна помощь в докере.

мой файл докера выглядит так:

FROM python:3-alpine

LABEL author="alaa"
LABEL description="Dockerfile for Python script which generates emails"
RUN pip install tqdm
COPY email_generator.py /app/
CMD python3 /app/email_generator.py

мой код pthon выглядит так:

import json  # to read json files
import os  # to access operation for get and changing directory


def writeTextFile(text, index):
    f = open(ziel + '/email_%s.txt' % index, 'w+')
    f.write(text)
    f.close()


def writeHashFile(text):
    f = open(ziel + '/00_Hash.json', 'w+')
    f.write(str(text))
    f.close()


def readJsonCordinate(fileName):
    """Read the json data."""
    with open(fileName, 'r', encoding='utf-8') as f:  # Opening the file
        data = json.load(f)  # Read the json file
    return data

и так далее. ..

мой вопрос: если я хочу получить файлы из хост-системы после создания образа, я получаю эту ошибку. но если я запускаю код нативно на pycharm в моей macOS, он отлично работает

Traceback (most recent call last):
  File "/app/email_generator.py", line 112, in <module>
    betreff = readJsonCordinate(quelle + '/Betreff.json')
  File "/app/email_generator.py", line 22, in readJsonCordinate
    with open(fileName, 'r', encoding='utf-8') as f:  # Opening the file
FileNotFoundError: [Errno 2] No such file or directory: '/Users/soso/desktop/email_generator/Worterbuecher/Betreff.json'

Ответы [ 2 ]

0 голосов
/ 10 ноября 2019

Вы не можете получить доступ к файлам в ВМ, используя пути к файлам ВМ.

Это потому, что файловая система контейнера фактически отключена от файловой системы ВМ.

Вы можете отобразить каталоги и файлы ВМ в контейнер, используя томов докера .

Тогда программа python сможет получить доступ к отображенным файлам и каталогам из контейнера, используя пути к контейнерам.

0 голосов
/ 10 ноября 2019

Вероятно, это связано с тем, что вы не скопировали файл, из-за которого возникла ошибка, в докер.

Проверьте, присутствует ли файл в образе докера:

docker run -it --rm --entrypoint="" <image-name>:<image-tag> /bin/sh

и введитев консоль:

find / -iname 'Betreff.json'

, чтобы найти этот файл внутри изображения и изменить путь в вашем python, чтобы он работал с обновленным путем

Или вы можете добавить в качестве отображенного каталога каталог, содержащий этотфайл с помощью -v помечать таким образом:

docker run -v /Users/soso/desktop/email_generator/Worterbuecher/:/Users/soso/desktop/email_generator/Worterbuecher/ ... some other opitons <docker-image>:<docker-tag>

больше информации о команда запуска docker для получения подробной информации ищите опцию -v или --volume

...