我遇到运行cron作业的容器的问题。该作业执行策展人删除一些弹性搜索索引。我在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_indices.sh中删除了.sh,因为ansible"不喜欢这个"!。
答案 0 :(得分:0)
相反,我只会将策展人的内容和必要的文件添加到图像中,并使用主机系统cron来运行容器。这将确保您拥有正确的环境变量和cron可能遇到的其他misc问题。
要回答您的问题,这将是您在容器中运行的命令:
package-b
第一个问题是package-a
,它不会像你想要的那样表现,因为命令cron -f && tail -f /var/log/cron.log rsyslogd
退出导致docker在&&
完成时退出,因此从不打电话给cron
。至少,这是我在本地运行cron
作为测试时发现的。其次,如果您想查看输出,请运行tail -f