让docker镜像与主机环境交互

问题描述 投票:1回答:2

我真的需要泊坞窗中的帮助。

我的docker文件看起来像:

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

依此类推...

我的问题是,如果我要在构建映像后从主机系统获取文件,则会收到此错误。但是,如果我在macOS的pycharm上天真地运行代码,它就可以完美运行

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'
python macos docker filesystems
2个回答
0
投票

这可能是因为您尚未将错误将要复制的文件复制到Docker中。

检查文件是否在Docker映像中存在:

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 run command的更多信息,请查找-v或--volume选项以了解详细信息


0
投票

您无法使用VM文件路径访问VM上的文件。

这是因为容器文件系统实际上已从VM文件系统断开连接。

您可以使用docker volumes将VM目录和文件映射到容器。

然后python程序将能够使用容器路径从容器内访问映射的文件和目录。

© www.soinside.com 2019 - 2024. All rights reserved.