diff --git a/apps/dokploy/components/dashboard/docker/logs/show-docker-modal-stack-logs.tsx b/apps/dokploy/components/dashboard/docker/logs/show-docker-modal-stack-logs.tsx
new file mode 100644
index 00000000..36719bb0
--- /dev/null
+++ b/apps/dokploy/components/dashboard/docker/logs/show-docker-modal-stack-logs.tsx
@@ -0,0 +1,58 @@
+import {
+ Dialog,
+ DialogContent,
+ DialogDescription,
+ DialogHeader,
+ DialogTitle,
+ DialogTrigger,
+} from "@/components/ui/dialog";
+import { DropdownMenuItem } from "@/components/ui/dropdown-menu";
+import dynamic from "next/dynamic";
+import type React from "react";
+export const DockerLogsId = dynamic(
+ () =>
+ import("@/components/dashboard/docker/logs/docker-logs-id").then(
+ (e) => e.DockerLogsId,
+ ),
+ {
+ ssr: false,
+ },
+);
+
+interface Props {
+ containerId: string;
+ children?: React.ReactNode;
+ serverId?: string | null;
+}
+
+export const ShowDockerModalStackLogs = ({
+ containerId,
+ children,
+ serverId,
+}: Props) => {
+ return (
+
+ );
+};
diff --git a/apps/dokploy/components/dashboard/swarm/applications/columns.tsx b/apps/dokploy/components/dashboard/swarm/applications/columns.tsx
index 1961cd99..69ccc41d 100644
--- a/apps/dokploy/components/dashboard/swarm/applications/columns.tsx
+++ b/apps/dokploy/components/dashboard/swarm/applications/columns.tsx
@@ -11,11 +11,7 @@ import {
} from "@/components/ui/dropdown-menu";
import { Badge } from "@/components/ui/badge";
-import { ShowNodeConfig } from "../details/show-node-config";
-// import { ShowContainerConfig } from "../config/show-container-config";
-// import { ShowDockerModalLogs } from "../logs/show-docker-modal-logs";
-// import { DockerTerminalModal } from "../terminal/docker-terminal-modal";
-// import type { Container } from "./show-containers";
+import { ShowDockerModalStackLogs } from "../../docker/logs/show-docker-modal-stack-logs";
export interface ApplicationList {
ID: string;
@@ -28,6 +24,7 @@ export interface ApplicationList {
DesiredState: string;
Error: string;
Node: string;
+ serverId: string;
}
export const columns: ColumnDef[] = [
@@ -212,7 +209,37 @@ export const columns: ColumnDef[] = [
);
},
cell: ({ row }) => {
- return {row.getValue("Errors")}
;
+ return {row.getValue("Errors")}
;
+ },
+ },
+ {
+ accessorKey: "Logs",
+ accessorFn: (row) => row.Error,
+ header: ({ column }) => {
+ return Logs;
+ },
+ cell: ({ row }) => {
+ return (
+
+
+
+
+
+
+ Actions
+
+ View Logs
+
+
+
+
+ );
},
},
];
diff --git a/apps/dokploy/components/dashboard/swarm/applications/show-applications.tsx b/apps/dokploy/components/dashboard/swarm/applications/show-applications.tsx
index 132cb008..df764225 100644
--- a/apps/dokploy/components/dashboard/swarm/applications/show-applications.tsx
+++ b/apps/dokploy/components/dashboard/swarm/applications/show-applications.tsx
@@ -89,6 +89,7 @@ export const ShowNodeApplications = ({ serverId }: Props) => {
Error: detail.Error,
Node: detail.Node,
Ports: detail.Ports || app.Ports,
+ serverId: serverId || "",
}));
});
diff --git a/packages/server/src/services/docker.ts b/packages/server/src/services/docker.ts
index 55764230..79cd8345 100644
--- a/packages/server/src/services/docker.ts
+++ b/packages/server/src/services/docker.ts
@@ -425,7 +425,8 @@ export const getNodeApplications = async (serverId?: string) => {
const appArray = stdout
.trim()
.split("\n")
- .map((line) => JSON.parse(line));
+ .map((line) => JSON.parse(line))
+ .filter((service) => !service.Name.startsWith('dokploy-'));
return appArray;
} catch (error) {}
@@ -438,7 +439,7 @@ export const getApplicationInfo = async (
try {
let stdout = "";
let stderr = "";
- const command = `docker service ps ${appName} --format '{{json .}}'`;
+ const command = `docker service ps ${appName} --format '{{json .}}' --no-trunc`;
if (serverId) {
const result = await execAsyncRemote(serverId, command);