2017-01-09 59 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