初步猜測原因是:keepalived容器內的keepalived.pid文件在keepalived容器非正常退出時,沒有正確刪除,造成第二次啟動時容器檢查到pid文件已經存在,認為該進程已經存在,因為keepalived容器的啟動檢查機制只允許同一台主機上啟動一個進程,所以無法啟動,並報錯:daemon is already running
注:該問題是keepalived軟件本身存在的一個bug,如果需要優化,可以考慮在keepalived容器內增加腳本,在keepalived容器啟動前進行一次清理動作,主動清理掉原來的keepalived.pid文件,待驗證
已驗證:上面猜測的原因是正確的
可以重新構建keepalived鏡像,在啟動keepalived之前刪除一遍keepalived.pid文件即可
新的dockerFile文件
FROM keepalived:1.3.5.0 MAINTAINER wulj COPY keepalived.sh /etc/init.d/ RUN chmod +x /etc/init.d/keepalived.sh ENTRYPOINT ["/etc/init.d/keepalived.sh"]
keepalived.sh文件
#!/bin/bash #decription:start keepalived echo `ps -ef` > /winhong_test.txt rm -rf /var/run/keepalived.pid /usr/sbin/keepalived --dont-fork --log-console --log-detail