我有一个如下所示的Dockerfile,我试图每15分钟运行一个python脚本,但出现以下错误
docker logs 7e1
run-parts: can't execute '/etc/periodic/15min/startjob': No such file or directory
我能够验证run-parts --test
正常运行。
cron文件和python文件似乎在docker容器中可用。
docker exec -it 7e1 /bin/sh
/ # run-parts --test /etc/periodic/15min/
/etc/periodic/15min/startjob
/ # ls -lrt /etc/periodic/15min/startjob
-rwxr-xr-x 1 root root 201 Jul 6 04:09 /etc/periodic/15min/startjob
/ # ls -lrt /app
total 8
-rwxr-xr-x 1 root root 10 Jul 5 17:36 requirements.txt
-rwxr-xr-x 1 root root 290 Jul 5 17:38 pyapp2.py
/ #
------- Dockerfile -----------
FROM python:3.7-alpine
COPY requirements.txt /
RUN pip install -r /requirements.txt
COPY cronscript.sh /etc/periodic/15min/startjob
RUN chmod a+x /etc/periodic/15min/startjob
COPY src/ /app
CMD [ "crond", "-l", "2", "-f" ]
-------- cronscript.sh --------
#!/bin/sh
echo "started $(date)" >> /tmp/job.log
echo "Job started: $(date)"
# Add additional instructions
python /app/pyapp2.py
echo "Job finished: $(date)"
echo "ended $(date)" >> /tmp/job.log
非常感谢任何指针。谢谢
答案 0 :(得分:1)
当脚本文件cronscript.sh
没有正确的行尾时(例如,在Windows CRLF上而不是在LF上),我可以重现您的问题。
如果您在Windows上编辑了该文件,则可以检查Dockerfile
中的以下快速修复程序是否可以解决您的问题:
FROM python:3.7-alpine
COPY requirements.txt /
RUN pip install -r /requirements.txt
COPY cronscript.sh /etc/periodic/15min/startjob
RUN chmod a+x /etc/periodic/15min/startjob
# Quick & dirty fix
RUN dos2unix /etc/periodic/15min/startjob
COPY src/ /app
CMD [ "crond", "-l", "2", "-f" ]
当然正确的方法是从一开始就修复文件中的行尾。
此外,您可以通过运行
查看文件中的控制字符
cat -v /etc/periodic/15min/startjob
从您的容器内,例如在将快速修复程序应用到我的机器上的输出之前,应如下所示(注意^M
)
cat -v /etc/periodic/15min/startjob
#!/bin/sh^M
echo "started $(date)" >> /tmp/job.log^M
echo "Job started: $(date)"^M
...