我有一个运行cron作业的容器的问题。该作业执行curator以删除一些elasticsearch索引。我在stackoverflow上读过很多类似的帖子,但我还是不明白。作业似乎调用了策展人,但索引并未被删除。如果我手动运行,也可以使用相同的命令。
这是我的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和docker 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更新:问题是在环境中找不到作为命令的管理员。当我将其更改为相对路径时,问题就解决了。同样基于一些建议,我从/opt/delete_indees.sh文件中删除了.sh,因为ansible“不喜欢这样”!
发布于 2017-01-10 07:31:27
我的天,这是一个方钉,圆孔的情况。
相反,我将只将curator内容和必要的文件添加到映像中,并使用主机系统cron来运行容器。这将确保您具有正确的env vars集以及使用cron时可能遇到的其他杂项问题。
为了回答您的问题,下面是您在容器中运行的命令:
cron -f && tail -f /var/log/cron.log rsyslogd
第一个问题是docker,它的行为不会像您希望的那样,因为命令cron退出,这会导致&&在cron完成时退出,因此永远不会调用tail -f。至少,这是我在本地运行&&作为测试时发现的。其次,如果要查看输出,可以运行docker logs curator
https://stackoverflow.com/questions/41557854
复制相似问题