2017-01-09 58 views
0

我有一个运行cron作业的容器存在问题。这项工作执行管理员删除一些elasticsearch指数。我已经阅读了许多类似的帖子,但我仍然没有得到它。这项工作似乎称为策展人,但索引不会被删除。如果我手动运行它,相同的命令工作。作为容器中的cron作业的馆长不能正常工作

这是我Dockerfile

FROM ubuntu:xenial 

RUN apt-get update && apt-get install python-pip rsyslog -y 
RUN groupadd -r curator && useradd -r -g curator curator 

RUN pip install elasticsearch-curator 

RUN apt-get install cron 

COPY delete_indices_cron /etc/cron.d/delete_indices_cron 
COPY ./delete_indices.sh /opt/delete_indices.sh 
COPY ./configs /opt/config 

RUN ["crontab", "/etc/cron.d/delete_indices_cron"]n 
RUN chmod 644 /etc/cron.d/delete_indices_cron 
RUN chmod 744 /opt/delete_indices.sh 
RUN touch /var/log/cron.log 
CMD ["rsyslogd"] 
ENTRYPOINT ["cron","-f","&&", "tail","-f","/var/log/cron.log"] 

docker run -d --link elasticsearch:elasticsearch --name curator mycurator4 

和泊坞窗PS输出

CONTAINER ID  IMAGE        COMMAND     CREATED    STATUS    PORTS                  NAMES 
eea96a48aa3a  mycurator4       "cron -f && tail -f /" 15 minutes ago  Up 15 minutes                     curator 
e584c9b090c8  vagrant-registry.vm:5000/sslserver "python /sslServer/ss" 2 weeks ago   Up 2 weeks   0.0.0.0:12121->12121/tcp              sslserver 
20eee9943664  kibana:4        "/docker-entrypoint.s" 2 weeks ago   Up 2 weeks   0.0.0.0:5601->5601/tcp              kibana 
8c462586982e  logstash:2       "/docker-entrypoint.s" 2 weeks ago   Up 2 weeks   0.0.0.0:5044->5044/tcp, 0.0.0.0:12201->12201/tcp, 0.0.0.0:12201->12201/udp logstash 
c971fa3e357b  elasticsearch:2      "/docker-entrypoint.s" 2 weeks ago   Up 2 weeks   0.0.0.0:9200->9200/tcp, 9300/tcp            elasticsearch 
4af9a78a4b1f  jenkins        "/bin/tini -- /usr/lo" 2 weeks ago   Up 2 weeks   0.0.0.0:8080->8080/tcp, 50000/tcp 

            jenkins 

UPDATE运行映像之后:问题是,馆长不能被发现作为环境中的命令。当我将它改为相对路径时,问题就解决了。也基于一些建议,我从/opt/delete_indices.sh中删除了.sh,因为ansible“不喜欢这个”!

回答

0

恕我直言,这是一个方形钉,圆孔的情况。

取而代之的是,我只添加策展人内容和必要的文件到要做的图像中,并使用主机系统cron来运行容器。这可以确保你拥有正确的环境变量设置和其他可能与cron有关的其他问题。

要回答你的问题,这会是什么命令你是从容器中运行:

cron -f && tail -f /var/log/cron.log rsyslogd

的第一个问题是&&,像你想让它,因为这不会表现命令cron退出,导致docker在cron完成时退出,因此不会调用tail -f。至少,这是我在本地运行&&作为测试时发现的。其次,如果你想看看输出,你会运行docker logs curator

+0

Hi @Nick。我遵循https://www.ekito.fr/people/run-a-cron-job-with-docker/中的例子,当我运行它时,我没有问题。顺便说一句,我改变了入口点只保留cron -f。毕竟没有区别。码头日志什么也没有返回。从系统日志我有这样的行:CRON [101]:(root)CMD(/opt/delete_indices.sh 2>&1)\ n CRON [100] :(CRON)info(没有MTA安装,丢弃输出)。另外,如果我按照你的建议做,我是否需要在图像中设置入口点? – b10n1k