diff --git a/src/components/services/status.jsx b/src/components/services/status.jsx
index 81d48589..afe161fb 100644
--- a/src/components/services/status.jsx
+++ b/src/components/services/status.jsx
@@ -12,7 +12,7 @@ export default function Status({ service }) {
     </div>
   }
 
-  if (data && data.status === "running") {
+  if (data && data.status.includes("running")) {
     if (data.health === "starting") {
       return (
         <div className="w-auto px-1.5 py-0.5 text-center bg-theme-500/10 dark:bg-theme-900/50 rounded-b-[3px] overflow-hidden" title={data.health}>
@@ -36,7 +36,7 @@ export default function Status({ service }) {
     );
   }
 
-  if (data && (data.status === "not found" || data.status === "exited")) {
+  if (data && (data.status === "not found" || data.status === "exited" || data.status?.startsWith("partial"))) {
     return (
       <div className="w-auto px-1.5 py-0.5 text-center bg-theme-500/10 dark:bg-theme-900/50 rounded-b-[3px] overflow-hidden" title={data.status}>
         <div className="text-[8px] font-bold text-orange-400/50 dark:text-orange-400/80 uppercase">{data.status}</div>
diff --git a/src/pages/api/docker/status/[...service].js b/src/pages/api/docker/status/[...service].js
index 4a706c4d..2bcc0a8a 100644
--- a/src/pages/api/docker/status/[...service].js
+++ b/src/pages/api/docker/status/[...service].js
@@ -44,42 +44,65 @@ export default async function handler(req, res) {
     }
 
     if (dockerArgs.swarm) {
-      const tasks = await docker.listTasks({
+      const serviceInfo = await docker.getService(containerName).inspect()
+        .catch(() => undefined);
+
+      if (!serviceInfo) {
+        return res.status(404).send({
+          status: "not found",
+        });
+      }
+
+      const tasks = await docker
+        .listTasks({
           filters: {
             service: [containerName],
-            // A service can have several offline containers, we only look for an active one.
             "desired-state": ["running"],
           },
         })
         .catch(() => []);
 
-      // TODO: Show the result for all replicas/containers?
-      // We can only get stats for 'local' containers so try to find one
-      const localContainerIDs = containers.map(c => c.Id);
-      const task = tasks.find(t => localContainerIDs.includes(t.Status?.ContainerStatus?.ContainerID)) ?? tasks.at(0);
-      const taskContainerId = task?.Status?.ContainerStatus?.ContainerID;
-      
-      if (taskContainerId) {
-        try {
-          const container = docker.getContainer(taskContainerId);
-          const info = await container.inspect();
-  
+      if (serviceInfo.Spec.Mode?.Replicated) {
+        // Replicated service, check n replicas
+        const replicas = parseInt(serviceInfo.Spec.Mode?.Replicated?.Replicas, 10);
+        if (tasks.length === replicas) {
           return res.status(200).json({
-            status: info.State.Status,
-            health: info.State.Health?.Status,
+            status: `running ${tasks.length}/${replicas}`,
           });
-        } catch (e) {
-          if (task) {
+        }
+        if (tasks.length > 0) {
+          return res.status(200).json({
+            status: `partial ${tasks.length}/${replicas}`,
+          });
+        }
+      } else {
+        // Global service, prefer 'local' containers
+        const localContainerIDs = containers.map(c => c.Id);
+        const task = tasks.find(t => localContainerIDs.includes(t.Status?.ContainerStatus?.ContainerID)) ?? tasks.at(0);
+        const taskContainerId = task?.Status?.ContainerStatus?.ContainerID;
+        
+        if (taskContainerId) {
+          try {
+            const container = docker.getContainer(taskContainerId);
+            const info = await container.inspect();
+    
             return res.status(200).json({
-              status: task.Status.State
-            })
+              status: info.State.Status,
+              health: info.State.Health?.Status,
+            });
+          } catch (e) {
+            if (task) {
+              return res.status(200).json({
+                status: task.Status.State
+              })
+            }
           }
         }
       }
     }
 
-    return res.status(200).send({
-      error: "not found",
+    return res.status(404).send({
+      status: "not found",
     });
   } catch (e) {
     logger.error(e);
diff --git a/src/widgets/docker/component.jsx b/src/widgets/docker/component.jsx
index 9d3affd3..7ef5e6ce 100644
--- a/src/widgets/docker/component.jsx
+++ b/src/widgets/docker/component.jsx
@@ -22,7 +22,7 @@ export default function Component({ service }) {
     return <Container error={finalError} />;
   }
 
-  if (statusData && statusData.status !== "running") {
+  if (statusData && !(statusData.status.includes("running") || statusData.status.includes("partial"))) {
     return (
       <Container>
         <Block label={t("widget.status")} value={t("docker.offline")} />