diff --git a/server/routers/site/createSite.ts b/server/routers/site/createSite.ts
index c9b54bf2..b950644a 100644
--- a/server/routers/site/createSite.ts
+++ b/server/routers/site/createSite.ts
@@ -141,6 +141,7 @@ export async function createSite(
niceId,
subnet,
type,
+ dockerSocketEnabled: type == "newt",
...(pubKey && type == "wireguard" && { pubKey })
})
.returning();
@@ -154,6 +155,7 @@ export async function createSite(
name,
niceId,
type,
+ dockerSocketEnabled: type == "newt",
subnet: "0.0.0.0/0"
})
.returning();
diff --git a/src/app/[orgId]/settings/resources/[resourceId]/ResourceInfoBox.tsx b/src/app/[orgId]/settings/resources/[resourceId]/ResourceInfoBox.tsx
index b59fe93e..69c61105 100644
--- a/src/app/[orgId]/settings/resources/[resourceId]/ResourceInfoBox.tsx
+++ b/src/app/[orgId]/settings/resources/[resourceId]/ResourceInfoBox.tsx
@@ -20,7 +20,7 @@ export default function ResourceInfoBox({}: ResourceInfoBoxType) {
const { resource, authInfo, site } = useResourceContext();
const api = createApiClient(useEnvContext());
- const { isEnabled, isAvailable } = useDockerSocket(resource.siteId);
+ const { isEnabled, isAvailable } = useDockerSocket(site!);
let fullUrl = `${resource.ssl ? "https" : "http"}://${resource.fullDomain}`;
diff --git a/src/app/[orgId]/settings/resources/[resourceId]/proxy/page.tsx b/src/app/[orgId]/settings/resources/[resourceId]/proxy/page.tsx
index 8c2365d8..d2bfee4b 100644
--- a/src/app/[orgId]/settings/resources/[resourceId]/proxy/page.tsx
+++ b/src/app/[orgId]/settings/resources/[resourceId]/proxy/page.tsx
@@ -776,7 +776,7 @@ export default function ReverseProxyTargets(props: {
- {site && (
+ {site && site.type == 'newt' && (
)}
/>
- (
-
-
-
-
-
-
- Enable Docker Socket discovery
- for populating container
- information, useful in resource
- targets.
-
-
- )}
- />
+ {site && site.type === "newt" && (
+ (
+
+
+
+
+
+
+ Enable Docker Socket
+ discovery for populating
+ container information,
+ useful in resource targets.
+
+
+ )}
+ />
+ )}
diff --git a/src/components/ContainersSelector.tsx b/src/components/ContainersSelector.tsx
index 6c7c1368..9355692f 100644
--- a/src/components/ContainersSelector.tsx
+++ b/src/components/ContainersSelector.tsx
@@ -68,8 +68,9 @@ export const ContainersSelector: FC = ({
}) => {
const [open, setOpen] = useState(false);
const isDesktop = useMediaQuery("(min-width: 768px)");
+
const { isAvailable, containers, fetchContainers } = useDockerSocket(
- site.siteId
+ site
);
useEffect(() => {
diff --git a/src/hooks/useDockerSocket.ts b/src/hooks/useDockerSocket.ts
index ef188ac4..bf4746f5 100644
--- a/src/hooks/useDockerSocket.ts
+++ b/src/hooks/useDockerSocket.ts
@@ -10,15 +10,13 @@ import {
} from "@server/routers/site";
import { AxiosResponse } from "axios";
import { toast } from "./useToast";
+import { Site } from "@server/db";
const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));
-export function useDockerSocket(siteId: number) {
- if (!siteId) {
- throw new Error("Site ID is required to use Docker Socket");
- }
+export function useDockerSocket(site: Site) {
+ console.log(`useDockerSocket initialized for site ID: ${site.siteId}`);
- const [site, setSite] = useState();
const [dockerSocket, setDockerSocket] = useState();
const [containers, setContainers] = useState([]);
@@ -27,40 +25,18 @@ export function useDockerSocket(siteId: number) {
const { dockerSocketEnabled: isEnabled = true } = site || {};
const { isAvailable = false, socketPath } = dockerSocket || {};
- const fetchSite = useCallback(async () => {
- try {
- const res = await api.get>(
- `/site/${siteId}`
- );
-
- if (res.status === 200) {
- setSite(res.data.data);
- }
- } catch (err) {
- console.error(err);
- toast({
- variant: "destructive",
- title: "Failed to fetch resource",
- description: formatAxiosError(
- err,
- "An error occurred while fetching resource"
- )
- });
- }
- }, [api, siteId]);
-
const checkDockerSocket = useCallback(async () => {
if (!isEnabled) {
console.warn("Docker socket is not enabled for this site.");
return;
}
try {
- const res = await api.post(`/site/${siteId}/docker/check`);
+ const res = await api.post(`/site/${site.siteId}/docker/check`);
console.log("Docker socket check response:", res);
} catch (error) {
console.error("Failed to check Docker socket:", error);
}
- }, [api, siteId, isEnabled]);
+ }, [api, site.siteId, isEnabled]);
const getDockerSocketStatus = useCallback(async () => {
if (!isEnabled) {
@@ -70,7 +46,7 @@ export function useDockerSocket(siteId: number) {
try {
const res = await api.get>(
- `/site/${siteId}/docker/status`
+ `/site/${site.siteId}/docker/status`
);
if (res.status === 200) {
@@ -92,7 +68,7 @@ export function useDockerSocket(siteId: number) {
description: "An error occurred while fetching Docker status."
});
}
- }, [api, siteId, isEnabled]);
+ }, [api, site.siteId, isEnabled]);
const getContainers = useCallback(
async (maxRetries: number = 3) => {
@@ -111,7 +87,7 @@ export function useDockerSocket(siteId: number) {
try {
const res = await api.get<
AxiosResponse
- >(`/site/${siteId}/docker/containers`);
+ >(`/site/${site.siteId}/docker/containers`);
setContainers(res.data.data);
return;
} catch (error: any) {
@@ -160,7 +136,7 @@ export function useDockerSocket(siteId: number) {
try {
const res = await api.post>(
- `/site/${siteId}/docker/trigger`
+ `/site/${site.siteId}/docker/trigger`
);
// TODO: identify a way to poll the server for latest container list periodically?
await fetchContainerList();
@@ -169,13 +145,9 @@ export function useDockerSocket(siteId: number) {
console.error("Failed to trigger Docker containers:", error);
}
},
- [api, siteId, isEnabled, isAvailable]
+ [api, site.siteId, isEnabled, isAvailable]
);
- useEffect(() => {
- fetchSite();
- }, [fetchSite]);
-
// 2. Docker socket status monitoring
useEffect(() => {
if (!isEnabled || isAvailable) {