繁体   English   中英

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

[英]How can I access other files in the same Docker container?

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

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

在上面描述的server_multithreaded.py文件中,我正在导入另一个文件,如下所示:

from poses.poseapp.poseapp_sockets import PoseAppWSockets

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

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'

据我了解,“姿势”目录无法访问,或者我没有以正确的方式访问它。 我需要为 server_multithreaded.py 做些什么才能在我运行它时访问其他文件?

项目的文件结构如下:

在此处输入图像描述

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.pathserver_multithreaded.py 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 中的PYTHONPATH

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

此问题很可能与 docker 无关,而是与您的 PYTHONPATH 环境变量(在 docker 容器内)有关。 您必须确保其中包含capstone-pose-estimation 此外,您应该将poses和姿势应用程序设置为poseapp (包含__init___.py )以便从中导入

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM