'Missing parameters']; switch ($action) { case 'start': if ($container) $arrResponse = ['success' => $DockerClient->startContainer($container)]; break; case 'pause': if ($container) $arrResponse = ['success' => $DockerClient->pauseContainer($container)]; break; case 'stop': if ($container) $arrResponse = ['success' => $DockerClient->stopContainer($container)]; break; case 'resume': if ($container) $arrResponse = ['success' => $DockerClient->resumeContainer($container)]; break; case 'restart': if ($container) $arrResponse = ['success' => $DockerClient->restartContainer($container)]; break; case 'remove_container': if ($container) $arrResponse = ['success' => $DockerClient->removeContainer($name, $container, 1)]; break; case 'remove_image': if ($image) $arrResponse = ['success' => $DockerClient->removeImage($image)]; break; case 'remove_all': if ($container && $image) { // first: try to remove container $ret = $DockerClient->removeContainer($name, $container, 2); if ($ret === true) { // next: try to remove image $arrResponse = ['success' => $DockerClient->removeImage($image)]; } else { // error: container failed to remove $arrResponse = ['success' => $ret]; } } break; case 'log': if ($container) { $since = $_REQUEST['since'] ?? ''; $title = $_REQUEST['title'] ?? ''; require_once "$docroot/webGui/include/ColorCoding.php"; if (!$since) { readfile("$docroot/plugins/dynamix.docker.manager/log.htm"); echo ""; echo ""; $tail = 350; } else { $tail = null; } $echo = function($s) use ($match) { $line = substr(trim($s), 8); $span = "span"; foreach ($match as $type) { foreach ($type['text'] as $text) { if (preg_match("/$text/i",$line)) { $span = "span class='{$type['class']}'"; break 2; } } } echo ""; @flush(); }; $DockerClient->getContainerLog($container, $echo, $tail, $since); echo ''; @flush(); exit; } break; case 'terminal': exec("kill \$(pgrep -a ttyd|awk '/\/$name\.sock/{print \$1}') 2>/dev/null"); @unlink("/var/tmp/$name.sock"); exec("exec ttyd -d 0 -i '/var/tmp/$name.sock' docker exec -it '$name' sh &>/dev/null &"); break; default: $arrResponse = ['error' => "Unknown action '$action'"]; break; } header('Content-Type: application/json'); die(json_encode($arrResponse));