diff --git a/Dockerfile b/Dockerfile index 83d513cec..9ca82df2c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,6 +8,8 @@ RUN yarn build FROM node:16.14.0-alpine WORKDIR /app +LABEL coolify.managed true + RUN apk add --no-cache git openssh-client curl jq cmake sqlite RUN curl -f https://get.pnpm.io/v6.16.js | node - add --global pnpm@6 diff --git a/src/lib/database/destinations.ts b/src/lib/database/destinations.ts index a4e5ec228..a55fba52f 100644 --- a/src/lib/database/destinations.ts +++ b/src/lib/database/destinations.ts @@ -37,11 +37,9 @@ export async function configureDestinationForDatabase({ id, destinationId }) { const host = getEngine(engine); if (type && version) { const baseImage = getDatabaseImage(type); - asyncExecShell(`DOCKER_HOST=${host} docker pull ${baseImage}:${version}`); - asyncExecShell(`DOCKER_HOST=${host} docker pull coollabsio/${defaultProxyImageTcp}`); - asyncExecShell(`DOCKER_HOST=${host} docker pull coollabsio/${defaultProxyImageHttp}`); - asyncExecShell(`DOCKER_HOST=${host} docker pull certbot/certbot:latest`); - asyncExecShell(`DOCKER_HOST=${host} docker pull alpine:latest`); + asyncExecShell( + `DOCKER_HOST=${host} docker pull ${baseImage}:${version} && echo "FROM ${baseImage}:${version}" | docker build --label coolify.managed="true" -t "${baseImage}:${version}" -` + ); } } } diff --git a/src/lib/queues/cleanup.ts b/src/lib/queues/cleanup.ts index 14a1d3fa3..e0ebfc642 100644 --- a/src/lib/queues/cleanup.ts +++ b/src/lib/queues/cleanup.ts @@ -1,22 +1,38 @@ import { dev } from '$app/env'; import { asyncExecShell, getEngine } from '$lib/common'; import { prisma } from '$lib/database'; +import { defaultProxyImageHttp, defaultProxyImageTcp } from '$lib/haproxy'; export default async function () { if (!dev) { const destinationDockers = await prisma.destinationDocker.findMany(); for (const destinationDocker of destinationDockers) { const host = getEngine(destinationDocker.engine); + // Tagging images with labels try { - // await asyncExecShell(`DOCKER_HOST=${host} docker container prune -f`); + const images = [ + `coollabsio/${defaultProxyImageTcp}`, + `coollabsio/${defaultProxyImageHttp}`, + 'certbot/certbot:latest', + ' alpine:latest' + ]; + for (const image of images) { + await asyncExecShell( + `DOCKER_HOST=${host} docker pull ${image} && echo "FROM ${image}" | docker build --label coolify.managed="true" -t "${image}" -` + ); + } + } catch (error) {} + try { + await asyncExecShell(`DOCKER_HOST=${host} docker container prune -f`); } catch (error) { - // console.log(error); } + // Cleanup images that are not managed by coolify try { - // await asyncExecShell(`DOCKER_HOST=${host} docker image prune -f`); + await asyncExecShell( + `DOCKER_HOST=${host} docker image prune --filter 'label!=coolify.managed=true' -a -f` + ); } catch (error) { - // console.log(error); } }