Обработка событий Docker в сценарии оболочки - PullRequest
1 голос
/ 08 октября 2019

Я бы хотел отлавливать события докера и что-то делать, если что-то случилось. Есть много способов «получить / напечатать события»:

# With curl
curl --unix-socket /var/run/docker.sock http:/v1.40/events

# With nc
echo -e "GET /events HTTP/1.0\r\n" | nc -U /var/run/docker.sock

Но есть ли способ непрерывного прослушивания и обработки каждой строки / события? Например:

while EVENT ?magic?; do
    ACTION=$(echo $EVENT | jq .Action )
    if [ $ACTION -eq "start" ]; then ....; fi
done

Решение

После ответа @Adiii короткое решение:

#!/bin/bash

function handle {
    # Check the line is a JSON line:
    if [[ ${1:0:1} == "{" ]]; then

        # ... You can do here anything ...

        # Print: "LOG $line", "LOG" is green
        echo -e "\033[32;1mLOG\033[0m $line"
    fi
}

echo -e "GET /events HTTP/1.0\r\n" | nc -U /var/run/docker.sock | while read line; do handle $line; done;

1 Ответ

1 голос
/ 08 октября 2019

Вы можете попробовать docker events, которое непрерывно поддерживает событие Docker.

docker events 

Например, если вы просто заинтересованы в событии grep container started, подойдет приведенная ниже команда или вы можете улучшить приведенный ниже скрипт.

#!/bin/bash
docker events |  while read line; do  if [[ ${line} = *"start"* ]];then echo " container started ${line}" ;fi ; done
...