我使用supervisor运行cron和nginx,问题是当我尝试COPY
或VOLUME
挂载我的cron文件时,它不运行我的cron文件/etc/cron.dDocker不会运行带外部源的cron作业文件(主机-windows)
但是,当我将exec -it <container_id> bash
放入容器并从里面创建完全相同的cron文件时,它立即被识别并按照它应该运行。
Dockerfile:
FROM phusion/baseimage:latest
ENV TERM xterm
ENV HOME /root
RUN apt-get update && apt-get install -y \
nginx \
supervisor \
curl \
nano \
net-tools
RUN rm -rf /etc/nginx/*
COPY nginx_conf /etc/nginx
COPY supervisor_conf /etc/supervisor/
RUN mkdir -p /var/log/supervisor
COPY crontabs /etc/cron.d/
RUN chmod -R 644 /etc/cron.d/
CMD /usr/bin/supervisord
这个cron本身
* * * * * root curl --silent http://127.0.0.1/cronjob/cron_test_docker.php >> /var/www/html/log/docker_test.log 2>&1
cron和nginx的通过主管
[supervisord]
nodaemon = true
[program:nginx]
command = /usr/sbin/nginx -g "daemon off;"
autostart = true
[program:cron]
command = /usr/sbin/cron -f
autostart = true
日志内运行与cron等环境stdout
和stderr
是空/var/log/supervisor/
。
我也试图剥离出来的主管,并通过PHUSION和CMD cron -f
运行在自己的cron,但得到的是不工作的同样的问题当源是外部的(COPY
或VOLUME
),并奇迹般地在容器内创建时的作品。
最初认为它是一个权限问题,并尝试chmod 644
(因为这是在容器中创建的文件的权限)所有文件都是COPY
的结果。
RUN chmod 644 /etc/cron.d/
之后尝试所有可能的权限组合与rwx
无济于事。
另外,试图将cronjob的行追加到/etc/crontab
中,但它在crontab -l
中未被识别。
COPY crontab /tmp/crontab
RUN cat crontab >> /etc/crontab
这将是非常方便的,如果它的工作只是当它是通过COPY
或VOLUME
创建,因为它是一个麻烦,以在容器中每次手动创建它。
任何帮助将不胜感激!
编辑1:
约COPY
或VOLUME
后的文件权限一些额外的信息。
当我执行
COPY crontabs /etc/cron.d/ RUN chmod -R 644 /etc/cron.d/
运行
ls -l
内/etc/cron.d/
容器内显示-rw-r--r-- 1 root root 118 Jul 20 11:03 wwwcron-cron-docker_test
当我通过我的
安装文件夹docker-compose
通过VOLUME
ls -l
显示-rwxrwxrwx 1 1000 staff 118 Jul 20 11:03 wwwcron-cron-docker_test
另外,如果我手动创建它看起来像这样的容器中的cron文件,这个工程
-rw-r--r-- 1 root root 118 Jul 22 15:50 wwwcron-cron-docker_test_inside_docker
显然有很大的不同权限和所有权在制作COPY
或VOLUME
。但使用确切权限制作COPY
不起作用,但在容器中创建时似乎工作。
当您将容器导入为容器时,crontab文件在容器内看起来像什么? – BMitch
@BMitch:在编辑1中增加了更多信息。如果你问的是内容 - 当然是完全一样的。 – Nathan
你的主机操作系统是什么?你在Windows上编辑过cron文件吗?想知道你是否有换行问题。 – BMitch