如何访问同一Docker容器中的其他文件?

2024-06-16 11:41:22 发布

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

我是Docker的新手。当我运行docker容器时,Dockerfile中的最后一行如下所示:

CMD ["python3", "./poses/server/server_multithreaded.py"]

在上面描述的服务器\u multithread.py文件中,我正在导入另一个文件,如下所示:

from poses.poseapp.poseapp_sockets import PoseAppWSockets

当我使用命令docker run -p 8089:8089 zoheezus/capstone运行container时,出现以下错误:

Traceback (most recent call last):
   File "./poses/server/server_multithreaded.py", line 18, in <module>
      from poses.poseapp.poseapp_sockets import PoseAppWSockets
ImportError: No module named 'poses'

据我所知,“poses”目录不可访问,或者我没有以正确的方式访问它运行server_multi threaded.py时,我需要做什么才能访问其他文件?

项目的文件结构如下所示:

enter image description here


Tags: 文件dockerfrompyimportserver容器sockets
2条回答

Python不会将当前工作路径添加到模块搜索路径中,它只会将顶级脚本的路径添加到搜索路径中,当然也会搜索PYTHONPATHsys path

对于您的情况,将不搜索当前工作路径/usr/pose_recognizer,只搜索/usr/pose_recognizer/poses/server。所以,它肯定找不到名为“poses”的模块

要使其适合您,请提供一些选项:

选项1:作为模块执行server_multithreaded.py

python -m poses.server.server_multithreaded

选项2:将server_multithreaded.py中的sys.path更改为from poses.poseapp.poseapp_sockets import PoseAppWSockets之前的下一个:

import sys
import os
file_path = os.path.abspath(os.path.dirname(__file__)).replace('\\', '/')
lib_path = os.path.abspath(os.path.join(file_path, '../..')).replace('\\', '/')
sys.path.append(lib_path)

选项3:更改dockerfile:

WORKDIR /usr/pose_recognizer
ENV PYTHONPATH=.
CMD ["python3", "./poses/server/server_multithreaded.py"]

这个问题很可能与docker无关,而是与PYTHONPATH环境变量(在docker容器中)有关。您必须确保capstone-pose-estimation在其中。此外,您应该使posesposeapp成为一个包(包含__init___.py),以便从中导入

相关问题 更多 >