更改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。
相反,我已经尝试了一些东西:
- 在dockerfile
ENV PYTHONPATH=$PWD/..
- 在泊坞窗,compose.yml
entrypoint: ["PYTHONPATH=/..","python3", "/crm/maintenance/maintenance.py"]
- 在泊坞窗,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