[英]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.