簡體   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