瀏覽代碼

feat(self-check): add Docker socket existence check

Jacky 1 周之前
父節點
當前提交
7dfb6e86e6

+ 2 - 0
.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

+ 1 - 1
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)

+ 1 - 1
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)

+ 8 - 0
app/src/views/system/SelfCheck/tasks/backend/index.ts

@@ -26,6 +26,14 @@ const backendTasks: Record<string, BackendTask> = {
     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

+ 11 - 0
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
+}

+ 17 - 0
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
+}

+ 1 - 0
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")
 )

+ 7 - 0
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) {