From 7dfb6e86e6fb57a9a24030c0e49fe6a5ea8014bd Mon Sep 17 00:00:00 2001 From: Jacky Date: Tue, 22 Apr 2025 14:14:23 +0000 Subject: [PATCH] feat(self-check): add Docker socket existence check --- .devcontainer/docker-compose.yml | 2 ++ api/system/upgrade.go | 2 +- app/src/lib/http/error.ts | 2 +- .../system/SelfCheck/tasks/backend/index.ts | 8 ++++++++ internal/helper/docker.go | 11 +++++++++++ internal/self_check/docker.go | 17 +++++++++++++++++ internal/self_check/errors.go | 1 + internal/self_check/self_check.go | 7 +++++++ 8 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 internal/self_check/docker.go diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml index b4dbba57..8ea8aac9 100644 --- a/.devcontainer/docker-compose.yml +++ b/.devcontainer/docker-compose.yml @@ -29,6 +29,8 @@ services: nginx-ui-3: image: nginx-ui-dev container_name: nginx-ui-3 + environment: + - NGINX_UI_OFFICIAL_DOCKER=true volumes: - ../..:/workspaces:cached - ./data/nginx-ui-3/nginx:/etc/nginx diff --git a/api/system/upgrade.go b/api/system/upgrade.go index 0f52cffd..f438d2cf 100644 --- a/api/system/upgrade.go +++ b/api/system/upgrade.go @@ -70,7 +70,7 @@ func PerformCoreUpgrade(c *gin.Context) { logger.Error(err) return } - if helper.InNginxUIOfficialDocker() { + if helper.InNginxUIOfficialDocker() && helper.DockerSocketExists() { upgrader.DockerUpgrade(ws, &control) } else { upgrader.BinaryUpgrade(ws, &control) diff --git a/app/src/lib/http/error.ts b/app/src/lib/http/error.ts index fce29ef5..8844ba2b 100644 --- a/app/src/lib/http/error.ts +++ b/app/src/lib/http/error.ts @@ -32,7 +32,7 @@ export function handleApiError(err: CosyError, dedupe: MessageDedupe) { if (!errors[err.scope]) { try { // Dynamic import error files - import(`@/constants/errors/${err.scope}.ts`) + import(/* @vite-ignore */ `@/constants/errors/${err.scope}.ts`) .then(error => { registerError(err.scope!, error.default) displayErrorMessage(err, dedupe) diff --git a/app/src/views/system/SelfCheck/tasks/backend/index.ts b/app/src/views/system/SelfCheck/tasks/backend/index.ts index a8881ea1..220b61f5 100644 --- a/app/src/views/system/SelfCheck/tasks/backend/index.ts +++ b/app/src/views/system/SelfCheck/tasks/backend/index.ts @@ -26,6 +26,14 @@ const backendTasks: Record = { description: () => $gettext('Check if the nginx.conf includes the conf.d directory.'), type: 'backend', }, + 'Docker-Socket': { + name: () => $gettext('Docker Socket'), + description: () => $gettext('Check if /var/run/docker.sock exists. ' + + 'If you are using Nginx UI Official Docker Image, ' + + 'please make sure the docker socket is mounted like this: ' + + '`-v /var/run/docker.sock:/var/run/docker.sock`.'), + type: 'backend', + }, } export default backendTasks diff --git a/internal/helper/docker.go b/internal/helper/docker.go index 4bdb5556..1c5dd8e4 100644 --- a/internal/helper/docker.go +++ b/internal/helper/docker.go @@ -9,3 +9,14 @@ import ( func InNginxUIOfficialDocker() bool { return cast.ToBool(os.Getenv("NGINX_UI_OFFICIAL_DOCKER")) } + +func DockerSocketExists() bool { + if !InNginxUIOfficialDocker() { + return false + } + _, err := os.Stat("/var/run/docker.sock") + if os.IsNotExist(err) { + return false + } + return true +} diff --git a/internal/self_check/docker.go b/internal/self_check/docker.go new file mode 100644 index 00000000..486a0cfc --- /dev/null +++ b/internal/self_check/docker.go @@ -0,0 +1,17 @@ +package self_check + +import ( + "github.com/0xJacky/Nginx-UI/internal/helper" +) + +func CheckDockerSocket() error { + if !helper.InNginxUIOfficialDocker() { + return nil + } + + if !helper.DockerSocketExists() { + return ErrDockerSocketNotExist + } + + return nil +} diff --git a/internal/self_check/errors.go b/internal/self_check/errors.go index e745a245..5b04333b 100644 --- a/internal/self_check/errors.go +++ b/internal/self_check/errors.go @@ -17,4 +17,5 @@ var ( ErrStreamAvailableNotExist = e.New(4048, "Streams-available directory not exist") ErrStreamEnabledNotExist = e.New(4049, "Streams-enabled directory not exist") ErrNginxConfNotIncludeConfD = e.New(4050, "Nginx conf not include conf.d directory") + ErrDockerSocketNotExist = e.New(4051, "Docker socket not exist") ) diff --git a/internal/self_check/self_check.go b/internal/self_check/self_check.go index 5f2325a0..f7548fa7 100644 --- a/internal/self_check/self_check.go +++ b/internal/self_check/self_check.go @@ -3,6 +3,7 @@ package self_check import ( "errors" + "github.com/0xJacky/Nginx-UI/internal/helper" "github.com/uozi-tech/cosy" ) @@ -53,6 +54,12 @@ func init() { for _, task := range selfCheckTasks { selfCheckTaskMap[task.Name] = task } + if helper.InNginxUIOfficialDocker() { + selfCheckTasks = append(selfCheckTasks, &Task{ + Name: "Docker-Socket", + CheckFunc: CheckDockerSocket, + }) + } } func Run() (reports Reports) {