Qualsiasi hook per Docker ucciso da memory

Sto facendo un mestiere per un lavoro di demone. E il contenitore sarà ucciso each più ore. Vorrei aggiungere un hook (callback), ad esempio:

riavviare il contenitore e quindi eseguire alcuni comandi sul contenitore riavviato

È ansible farlo con Docker?

Altrimenti, c'è un approccio migliore per rilevare il comportmento con Python o Ruby?

java invoked oom-killer: gfp_mask=0xd0, order=0, oom_score_adj=0 java cpuset=bcb33ac552c23cfa531814fbc3a64ae5cd8d85aa19245e1560e0ce3e3310c798 mems_allowed=0 CPU: 3 PID: 14182 Comm: java Not tainted 4.1.0-x86_64-linode59 #1 0000000000000000 ffff8800dc520800 ffffffff8195b396 ffff880002cf5ac0 ffffffff81955e58 ffff8800a2918c38 ffff8800f43c3e78 0000000000000000 ffff8800b5f687f0 000000000000000d ffffea0002d7da30 ffff88005bebdec0 Call Trace: [<ffffffff8195b396>] ? dump_stack+0x40/0x50 [<ffffffff81955e58>] ? dump_header+0x7b/0x1fe [<ffffffff8119655d>] ? __do_fault+0x3f/0x79 [<ffffffff811789d6>] ? find_lock_task_mm+0x2c/0x7b [<ffffffff81961c55>] ? _raw_spin_unlock_irqrestore+0x2d/0x3e [<ffffffff81178dee>] ? oom_kill_process+0xc5/0x387 [<ffffffff811789d6>] ? find_lock_task_mm+0x2c/0x7b [<ffffffff811b76be>] ? mem_cgroup_oom_synchronize+0x3ad/0x4c7 [<ffffffff811b6c92>] ? mem_cgroup_is_descendant+0x29/0x29 [<ffffffff811796e7>] ? pagefault_out_of_memory+0x1c/0xc1 [<ffffffff81963e58>] ? page_fault+0x28/0x30 Task in /docker/bcb33ac552c23cfa531814fbc3a64ae5cd8d85aa19245e1560e0ce3e3310c798 killed as a result of limit of /docker/bcb33ac552c23cfa531814fbc3a64ae5cd8d85aa19245e1560e0ce3e3310c798 memory: usage 524288kB, limit 524288kB, failcnt 14716553 memory+swap: usage 0kB, limit 9007199254740988kB, failcnt 0 kmem: usage 0kB, limit 9007199254740988kB, failcnt 0 Memory cgroup stats for /docker/bcb33ac552c23cfa531814fbc3a64ae5cd8d85aa19245e1560e0ce3e3310c798: cache:72KB rss:524216KB rss_huge:0KB mapped_file:64KB writeback:0KB inactive_anon:262236KB active_anon:262044KB inactive_file:4KB active_file:4KB unevictable:0KB [ pid ] uid tgid total_vm rss nr_ptes nr_pmds swapents oom_score_adj name [14097] 1000 14097 5215 20 17 3 47 0 entry_point.sh [14146] 0 14146 11960 0 30 3 101 0 sudo [14150] 1000 14150 1112 7 8 3 22 0 xvfb-run [14162] 1000 14162 51929 11220 90 3 95 0 Xvfb [14169] 1000 14169 658641 18749 120 6 0 0 java [14184] 1000 14184 28364 555 58 3 0 0 fluxbox [24639] 1000 24639 5212 59 16 3 0 0 bash Memory cgroup out of memory: Kill process 14169 (java) score 96 or sacrifice child Killed process 14169 (java) total-vm:2634564kB, anon-rss:74996kB, file-rss:0kB 

    Docker stesso non ha alcun meccanismo. Tutto quello che puoi fare è passare la bandiera --restart per dire a Docker quando dovrà provare a portre indietro un contenitore fallito.

    Tuttavia, la maggior parte dei luoghi in cui si desidera mantenere un contenitore in su ti vuole qualcosa di più complesso del flag --restart comunque. Una volta che si utilizza runit o systemd per gestire i tuoi contenitori, è facile aggiungere un codice di shell aggiuntivo per capire perché l'ultima invocazione si è schiantata e intraprenda alcune azioni speciali in base a questo.