diff --git a/packages/docker/src/index.ts b/packages/docker/src/index.ts index 131507d6a..bd8f5dc2a 100644 --- a/packages/docker/src/index.ts +++ b/packages/docker/src/index.ts @@ -8,3 +8,4 @@ export type { Docker }; export const containerStates = ["created", "running", "paused", "restarting", "exited", "removing", "dead"] as const; export type ContainerState = (typeof containerStates)[number]; +export * from "./labels"; diff --git a/packages/docker/src/labels.ts b/packages/docker/src/labels.ts new file mode 100644 index 000000000..84bf0071f --- /dev/null +++ b/packages/docker/src/labels.ts @@ -0,0 +1,4 @@ +export const dockerLabels = { + // Label to hide a container from Homarrs docker integration + hide: "homarr.hide", +} as const; diff --git a/packages/request-handler/package.json b/packages/request-handler/package.json index 8592069e1..4f1238365 100644 --- a/packages/request-handler/package.json +++ b/packages/request-handler/package.json @@ -26,6 +26,7 @@ "@homarr/common": "workspace:^0.1.0", "@homarr/db": "workspace:^0.1.0", "@homarr/definitions": "workspace:^0.1.0", + "@homarr/docker": "workspace:^0.1.0", "@homarr/integrations": "workspace:^0.1.0", "@homarr/log": "workspace:^0.1.0", "@homarr/redis": "workspace:^0.1.0", diff --git a/packages/request-handler/src/docker.ts b/packages/request-handler/src/docker.ts index cd82688d3..7a6d27be5 100644 --- a/packages/request-handler/src/docker.ts +++ b/packages/request-handler/src/docker.ts @@ -3,9 +3,9 @@ import type { ContainerInfo, ContainerStats } from "dockerode"; import { db, like, or } from "@homarr/db"; import { icons } from "@homarr/db/schema"; +import type { ContainerState } from "@homarr/docker"; +import { dockerLabels, DockerSingleton } from "@homarr/docker"; -import type { ContainerState } from "../../docker/src"; -import { DockerSingleton } from "../../docker/src"; import { createCachedWidgetRequestHandler } from "./lib/cached-widget-request-handler"; export const dockerContainersRequestHandler = createCachedWidgetRequestHandler({ @@ -27,13 +27,11 @@ async function getContainersWithStatsAsync() { const containers = await Promise.all( dockerInstances.map(async ({ instance, host }) => { const instanceContainers = await instance.listContainers({ all: true }); - return instanceContainers.map((container) => ({ - ...container, - instance: host, - })); + return instanceContainers + .filter((container) => dockerLabels.hide in container.Labels === false) + .map((container) => ({ ...container, instance: host })); }), ).then((res) => res.flat()); - const likeQueries = containers.map((container) => like(icons.name, `%${extractImage(container)}%`)); const dbIcons = diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4e3ff5075..25b1ef49d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1895,6 +1895,9 @@ importers: '@homarr/definitions': specifier: workspace:^0.1.0 version: link:../definitions + '@homarr/docker': + specifier: workspace:^0.1.0 + version: link:../docker '@homarr/integrations': specifier: workspace:^0.1.0 version: link:../integrations