在docker-compose文件中更改泊坞窗容器中的PYTHONPATH
我在docker容器中有一个应用程序,其入口点被定义为
ENTRYPOINT ["/usr/local/bin/gunicorn", "--pythonpath=`$PWD`/.."]
然后,我有三个容器进程使用该容器和入口点来从应用程序提供我的文件。 一切都很好。
我现在正在尝试启动另一个容纳gunicorn
命令的容器进程。 我希望它用这个命令运行一个python3
进程
entrypoint: ["python3", "/crm/maintenance/maintenance.py"]
在docker-compose.yml
文件中。
问题是,当我运行docker-compose up -d
上面的入口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'
我把这个错误归因于保持不正确的pythonpath。 对于Docker文件中定义的入口点,我有"--pythonpath=
$ PWD /.."
标志。 但是这不能转移到python3。
相反,我尝试了一些东西:
- 在dockerfile中
ENV PYTHONPATH=$PWD/..
- 在docker-compose.yml
entrypoint: ["PYTHONPATH=/..","python3", "/crm/maintenance/maintenance.py"]
maintenanceentrypoint: ["PYTHONPATH=/..","python3", "/crm/maintenance/maintenance.py"]
- 在docker-compose.yml
entrypoint: ["PYTHONPATH=$PWD/..","python3", "/crm/maintenance/maintenance.py"]
。 这不起作用,因为PWD是从不在容器中运行docker-compose up
命令的位置执行的。
如何在运行时在docker-compose文件的容器中更改PYTHONPATH?
您需要使用$$
来转义docker-compose的环境variablesparsing。 这是一个为我工作的示例文件
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