python - Python 依赖项和 Docker 和 Crontab
问题描述
尝试在 Docker 容器中通过 Crontab 运行 Python 脚本时遇到一个奇怪的问题。这是设置。
我有一个像这样的 Dockerfile:
FROM python:3-onbuild
# Install cron and dependencies
RUN apt-get update && apt-get -y install cron
# Add crontab file in the cron directory
ADD crontab /etc/cron.d/simple-cron
WORKDIR /src
COPY . /src
# Give execution rights on the cron job
RUN chmod 0644 /etc/cron.d/simple-cron
RUN chmod 777 /usr/local/lib/python3.6/site-packages
# Create the log file to be able to run tail
RUN touch /var/log/cron.log
# Run the command on container startup
CMD ["cron", "-f"]
还有一个像这样的 crontab 文件:
* * * * * root python /src/test.py > /proc/1/fd/1 2>/proc/1/fd/2
当我启动容器时,这可以正确执行,没有问题。我的 Python 文件的第一行是import redis
,导致脚本失败,说找不到模块。
有趣的是,当我手动执行时docker exec -it [container_name] python test.py
,一切都按预期工作。
这里可能是什么问题?我在想需求文件没有安装到正确的位置?
解决方案
使用 docker 中的 python,我肯定发现使用 vendoring 工具很有帮助。不要复制本地站点包,而是运行一个脚本或一系列RUN
命令:
- 建立虚拟环境
- 激活它
- 称呼
pip install -r requirements.txt
这是我在 dev 中使用的脚本的示例:
pip3 install virtualenv;
virtualenv --no-site-packages --python=python3.6 app;
virtualenv --relocatable app;
source ./app/bin/activate;
pip3 install -r requirements.txt;
推荐阅读
- java - 创建由 +6 个对象组成的 3 对,其中每对都有唯一且不重复的对象
- c# - 来自控制器的 asp.net mvc 刷新视图
- html - doxygen HTML 输出自定义
- c# - C# Filestream 文件锁定
- android - 如何在 android 的 Calendar VIew 上装饰或突出显示某些日期?
- c# - 在 c# 中使用输入字符串生成 CRC32 校验和
- spring-integration - 如何在 Spring Integration Rest 服务调用中的 Http.outboundGateway 中添加自定义标头?
- php - PHP - 使用爆炸增加文本文件中的多个值
- excel - Survey Monkey 的 Excel 数据清理检查所有适用的
- android - 我对 Datepicker 上下文有问题(android studio)