![](/img/trans.png)
[英]How can I have a host and container read/write the same files with 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 不会将当前工作路径添加到模块搜索路径中,它只会将顶级脚本的路径添加到搜索路径中,当然PYTHONPATH
, sys 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
从server_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.