_('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 = unscript($_REQUEST['since']??''); $title = unbundle($_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': $shell = $_REQUEST['shell'] ?: 'sh'; $pid = exec("pgrep -a ttyd|awk '/\\/$name\\.sock/{print \$1}'"); if ($pid) exec("kill $pid"); @unlink("/var/tmp/$name.sock"); exec("ttyd-exec -o -i '/var/tmp/$name.sock' docker exec -it '$name' $shell"); break; default: $arrResponse = ['error' => _('Unknown action')." '$action'"]; break; } header('Content-Type: application/json'); die(json_encode($arrResponse));