无法通过docker容器读取文本文件

2024-05-29 03:42:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我是docker的新手,我的程序读取存储在resources文件夹中的文本文件。 这是我的文件

FROM python:3.9

WORKDIR /event_listener

COPY requirements.txt .

RUN pip install -r requirements.txt

COPY ./src ./src

COPY resources event_listener/recources

CMD ["python","./src/main.py"]

这就是为构造函数提供文件路径的地方

class Contract:
    # initializing contract object
    def __init__(self, *args):
        self.chainList = ChainList('resources/chain_objects.txt').chains
 

我使用docker build --no-cache -t event_listener .创建docker容器 当我运行它时,我得到以下错误FileNotFoundError: [Errno 2] No such file or directory: 'resources/chain_objects.txt'

我的代码构建如下

|
|_src (source code)
|_resources(txt files)
          |_chain_objects.txt

Tags: 文件dockerself程序srctxt文件夹event
1条回答
网友
1楼 · 发布于 2024-05-29 03:42:00

看到你抓到了,但要小心这样的打字错误(资源!=资源)

我建议复制文件时使用完整路径,以尽量减少错误。 转向:

COPY resources event_listener/resources

为此:

COPY resources /event_listener/resources

在应用程序内部,使用完整路径而不是相对路径。 由此:

self.chainList = ChainList('resources/chain_objects.txt').chains

为此:

self.chainList = ChainList('/event_listener/resources/chain_objects.txt').chains

您在Dockerfile中设置的工作目录不适用于在基于它的容器中运行的应用程序。如果您的框架允许您将某种类型的workdir设置为其默认搜索位置,那么您可以通过这种方式实现,但为了避免此类错误,始终使用相对于工作环境的完整路径(如果您在项目上下文中提到像requirements.txt这样的文件,请使用相对路径)

第二点,帮助其他开发人员使用这个神奇的字符串,使它成为常量、环境变量或属性,您可以从添加的文件导入到项目中

环境变量:

>>> import os
>>> user = os.environ['USER']

属性文件:

ConfigFile.properties


[ExampleSection]
example = 1

守则:

config = configparser.ConfigParser()
config.read('ConfigFile.properties')

print(config.get("ExampleSection", "example"))

相关问题 更多 >

    热门问题