更改PYTHONPATH在码头工人容器中搬运工-撰写文件

问题描述:

我在码头工人容器,其入口点被定义为更改PYTHONPATH在码头工人容器中搬运工-撰写文件

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

然后一个应用程序,我有使用该容器和入口点3个容器进程从应用程序中提供我的文件。一切都很好。

我现在正在尝试启动另一个容器进程,该进程覆盖gunicorn命令。我希望它用命令

entrypoint: ["python3", "/crm/maintenance/maintenance.py"] 
docker-compose.yml文件

运行python3过程。

问题是当我运行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文件中定义的入口点,我有"--pythonpath= $ PWD /.."标志。但是这不能转移到python3。

相反,我已经尝试了一些东西:

  1. 在dockerfile ENV PYTHONPATH=$PWD/..
  2. 在泊坞窗,compose.yml entrypoint: ["PYTHONPATH=/..","python3", "/crm/maintenance/maintenance.py"]
  3. 在泊坞窗,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