首页 文章

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

提问于
浏览
1

我在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 .

相反,我尝试过很多东西:

  • 在dockerfile中 ENV PYTHONPATH=$PWD/..

  • 在docker-compose.yml entrypoint: ["PYTHONPATH=/..","python3", "/crm/maintenance/maintenance.py"]

  • 在docker-compose.yml entrypoint: ["PYTHONPATH=$PWD/..","python3", "/crm/maintenance/maintenance.py"] 中 . 这不起作用,因为从您运行 docker-compose up 命令的位置执行PWD而不是在容器中执行 .

如何在docker-compose文件中更改容器中运行时的PYTHONPATH?

1 回答

  • 2

    您需要使用 $$ 来转义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
    

相关问题