簡體   English   中英

在docker-compose文件中的docker容器中更改PYTHONPATH

[英]Change the PYTHONPATH in a docker container in docker-compose file

我在Docker容器中有一個應用程序,其入口點定義為

ENTRYPOINT ["/usr/local/bin/gunicorn", "--pythonpath=`$PWD`/.."]

然后,我有三個容器進程,它們使用該容器和入口點從應用程序中提供文件。 那里一切都很好。

我現在正在嘗試啟動另一個gunicorn命令的容器過程。 我希望它使用以下命令運行python3進程

entrypoint: ["python3", "/crm/maintenance/maintenance.py"]

docker-compose.yml文件中。

問題是當我使用上述入口點運行docker-compose up -d時,除運行python進程的容器外,所有容器都運行良好。

我得到的錯誤是:

Traceback (most recent call last):
File "/crm/maintenance/maintenance.py", line 6, in <module>
    from crm.sms_system.answer_send import AnswerSender
ImportError: No module named 'crm'

我將此錯誤歸因於仍然不正確的python路徑。 對於docker文件中定義的Entrypoint,我具有"--pythonpath= $ PWD /.."標志。 但這無法轉移到python3。

相反,我嘗試了很多事情:

  1. 在dockerfile中, ENV PYTHONPATH=$PWD/..
  2. 在docker-compose.yml entrypoint: ["PYTHONPATH=/..","python3", "/crm/maintenance/maintenance.py"]
  3. 在docker-compose.yml entrypoint: ["PYTHONPATH=$PWD/..","python3", "/crm/maintenance/maintenance.py"] 這是行不通的,因為PWD是從不在容器中的位置運行docker-compose up命令的位置執行的。

如何在運行時從docker-compose文件中的容器中更改PYTHONPATH?

您需要使用$$來轉義docker-compose的環境變量解析。 這是為我工作的示例文件

version: '2'
services:
  python:
    image: python:3.6
    working_dir: /usr/local
    command: bash -c "PYTHONPATH=$$PWD/.. python3 -c 'import sys; print(sys.path)'"

$ docker-compose up
Recreating test_python_1
Attaching to test_python_1
python_1  | ['', '/usr', '/usr/local/lib/python36.zip', '/usr/local/lib/python3.6', '/usr/local/lib/python3.6/lib-dynload', '/usr/local/lib/python3.6/site-packages']
test_python_1 exited with code 0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM