因爲docker 不加版本號直接拉取鏡像,默認的是拉取最新的版本鏡像,所以和舊版本的elastalert有版本衝突:
我們需要刪除最新的鏡像和容器,重新拉取指定版本的鏡像。
1、如何查看一個docker鏡像有哪些版本
要想查看鏡像的版本和TAG,需要在docker hub查看
地址如下:https://hub.docker.com/r/library/
使用 docker pull sebp/elk:752 命令來拉取指定版本的鏡像
2、在拉取新鏡像之前,需要刪除以前的鏡像和容器
由於image被某個container引用(拿來運行),如果不將這個引用的container銷燬(刪除),那image肯定是不能被刪除。
所以想要刪除運行過的images必須首先刪除它的container。
1)查看容器 (docker ps -a ):
可以看到sebp/elk鏡像是被容器使用着的,刪除容器:
2)刪除容器(docker rm 容器ID)
3)刪除鏡像(docker rmi 鏡像ID)
可以看到鏡像被刪除了
3、拉取新鏡像
docker pull sebp/elk:752
鏡像已存在:
4、創建容器
docker run -p 5601:5601 -p 9200:9200 -p 5044:5044 -p 514:514 -v /opt/elk-data/conf:/opt/conf -v /opt/elk-data/logs:/opt/logs -v /opt/elk-data/elasticsearch-data:/var/lib/elasticsearch -it -d --name elk sebp/elk:752
常見問題:
1、docker: Error response from daemon: driver failed programming external connectivity on endpoint elk (09bdc2d1f8dbfa4cbd376868f877be697e5391a8c8caef5f319e0dfaaf561d08): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 9200 -j DNAT --to-destination 172.17.0.2:9200 ! -i docker0: iptables: No chain/target/match by that name.
原因:
docker 服務啓動的時候,docker服務會向iptables註冊一個鏈,以便讓docker服務管理的containner所暴露的端口之間進行通信
通過命令iptables -L可以查看iptables 鏈
在開發環境中,如果你刪除了iptables中的docker鏈,或者iptables的規則被丟失了(例如重啓firewalld),docker就會報iptables error例如:failed programming external connectivity … iptables: No chain/target/match by that name
要解決這個問題,只要重啓docker服務,之後,正確的iptables規則就會被創建出來