([]);
+ function reload() {
+ axios.get('/api/docker/containers').then((res) => {
+ setContainers(res.data);
+ });
+ }
+
const toggleRow = (container: Docker.ContainerInfo) =>
setSelection((current) =>
current.includes(container) ? current.filter((c) => c !== container) : [...current, container]
@@ -43,9 +49,7 @@ export default function DockerDrawer(props: any) {
);
useEffect(() => {
- axios.get('/api/docker/containers').then((res) => {
- setContainers(res.data);
- });
+ reload();
}, []);
const rows = containers.map((element) => {
const selected = selection.includes(element);
@@ -62,15 +66,15 @@ export default function DockerDrawer(props: any) {
| {element.Image} |
- {element.Ports.slice(-3).map((port) => (
-
- {port.PrivatePort}:{port.PublicPort}
-
- ))}
+ {element.Ports.sort((a, b) => a.PrivatePort - b.PrivatePort)
+ .slice(-3)
+ .map((port) => (
+
+ {port.PrivatePort}:{port.PublicPort}
+
+ ))}
{element.Ports.length > 3 && (
-
- {element.Ports.length - 3} more
-
+ {element.Ports.length - 3} more
)}
|
@@ -85,7 +89,7 @@ export default function DockerDrawer(props: any) {
<>
setOpened(false)} padding="xl" size="full">
-
+
your docker containers
diff --git a/src/pages/api/docker/container/[id].tsx b/src/pages/api/docker/container/[id].tsx
index 5e6c7d54c..dd7c2fa65 100644
--- a/src/pages/api/docker/container/[id].tsx
+++ b/src/pages/api/docker/container/[id].tsx
@@ -29,11 +29,39 @@ async function Get(req: NextApiRequest, res: NextApiResponse) {
});
}
});
- if (action === 'restart') {
- await container.restart();
- return res.status(200).json({
- success: true,
- });
+
+ switch (action) {
+ case 'start':
+ container.start((err, data) => {
+ if (err) {
+ res.status(500).json({
+ message: err,
+ });
+ }
+ });
+ break;
+ case 'stop':
+ container.stop((err, data) => {
+ if (err) {
+ res.status(500).json({
+ message: err,
+ });
+ }
+ });
+ break;
+ case 'restart':
+ container.restart((err, data) => {
+ if (err) {
+ res.status(500).json({
+ message: err,
+ });
+ }
+ });
+ break;
+ default:
+ res.status(400).json({
+ message: 'Invalid action',
+ });
}
return res.status(200).json({
success: true,