ch3nnn / webstack-go

基于Gin框架的网址导航项目,具备完整的前后台。您可以拿来制作自己平日收藏的网址导航。
http://47.94.59.82:9999/
MIT License
219 stars 61 forks source link

删除webstack-go-service容器,重新启动会报错 #57

Closed likuankuan closed 1 year ago

likuankuan commented 1 year ago

修改webstack-go-service的代码重新打包启动会报错

{"level":"error","time":"2023-09-07 15:28:09","caller":"core/core.go:377","msg":"got panic","domain":"go-gin-api[docker]","panic":"runtime error: invalid memory address or nil pointer dereference","stack":"goroutine 13 [running]:\nruntime/debug.Stack()\n\t/usr/local/go/src/runtime/debug/stack.go:24 +0x5e\ngithub.com/ch3nnn/webstack-go/internal/pkg/core.New.func2.1()\n\t/home/gopath/src/github.com/ch3nnn/webstack-go/internal/pkg/core/core.go:376 +0x13a\npanic({0x1198c80?, 0x3b98c10?})\n\t/usr/local/go/src/runtime/panic.go:914 +0x21f\ngithub.com/ch3nnn/webstack-go/internal/services/category.(*service).Tree(0x0?, {0x2086918?, 0xc00188a038?})\n\t/home/gopath/src/github.com/ch3nnn/webstack-go/internal/services/category/service_tree.go:33 +0xac\ngithub.com/ch3nnn/webstack-go/internal/api/index.(*handler).Index.func1({0x2086918, 0xc00188a038})\n\t/home/gopath/src/github.com/ch3nnn/webstack-go/internal/api/index/func_index.go:19 +0x4d\ngithub.com/ch3nnn/webstack-go/internal/pkg/core.(*router).GET.wrapHandlers.func1(0x3ba12a0?)\n\t/home/gopath/src/github.com/ch3nnn/webstack-go/internal/pkg/core/core.go:214 +0x6a\ngithub.com/gin-gonic/gin.(*Context).Next(...)\n\t/home/gopath/pkg/mod/github.com/gin-gonic/gin@v1.9.1/context.go:174\ngithub.com/ch3nnn/webstack-go/internal/pkg/core.New.func3(0xc0002c8700)\n\t/home/gopath/src/github.com/ch3nnn/webstack-go/internal/pkg/core/core.go:547 +0x266\ngithub.com/gin-gonic/gin.(*Context).Next(...)\n\t/home/gopath/pkg/mod/github.com/gin-gonic/gin@v1.9.1/context.go:174\ngithub.com/ch3nnn/webstack-go/internal/pkg/core.New.func2(0xc0002c8700)\n\t/home/gopath/src/github.com/ch3nnn/webstack-go/internal/pkg/core/core.go:529 +0x29c\ngithub.com/gin-gonic/gin.(*Context).Next(...)\n\t/home/gopath/pkg/mod/github.com/gin-gonic/gin@v1.9.1/context.go:174\ngithub.com/ch3nnn/webstack-go/internal/pkg/core.New.func1(0xc0002c8700)\n\t/home/gopath/src/github.com/ch3nnn/webstack-go/internal/pkg/core/core.go:333 +0x66\ngithub.com/gin-gonic/gin.(*Context).Next(...)\n\t/home/gopath/pkg/mod/github.com/gin-gonic/gin@v1.9.1/context.go:174\ngithub.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc000581380, 0xc0002c8700)\n\t/home/gopath/pkg/mod/github.com/gin-gonic/gin@v1.9.1/gin.go:620 +0x65b\ngithub.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc000581380, {0x206ef28?, 0xc0000dc1c0}, 0xc000125500)\n\t/home/gopath/pkg/mod/github.com/gin-gonic/gin@v1.9.1/gin.go:576 +0x1dd\ngithub.com/ch3nnn/webstack-go/internal/pkg/core.(*mux).ServeHTTP(0x3c0ddc0?, {0x206ef28?, 0xc0000dc1c0?}, 0xc000177b50?)\n\t/home/gopath/src/github.com/ch3nnn/webstack-go/internal/pkg/core/core.go:234 +0x25\nnet/http.serverHandler.ServeHTTP({0xc001874e10?}, {0x206ef28?, 0xc0000dc1c0?}, 0x6?)\n\t/usr/local/go/src/net/http/server.go:2938 +0x8e\nnet/http.(*conn).serve(0xc000170b40, {0x2072a38, 0xc0018881b0})\n\t/usr/local/go/src/net/http/server.go:2009 +0x5f4\ncreated by net/http.(*Server).Serve in goroutine 10\n\t/usr/local/go/src/net/http/server.go:3086 +0x5cb\n"}
ch3nnn commented 1 year ago

请检查一下你修改的这行代码webstack-go/internal/services/category/service_tree.go:33 提示"无效的内存地址或者空指针"

likuankuan commented 1 year ago

我可能表达的有问题,我只修改了前端图标。 不修改代码也会有这个问题,麻烦您帮忙排查一下。

ch3nnn commented 1 year ago

我重新部署项目把 category 表数据全部删除也没复现。 是否可以说下操作步骤或者这部分代码。

likuankuan commented 1 year ago

可以这样复现: 初始化后只删除webstack-go-service

docker-compose -f docker-compose.yml up -d
http://127.0.0.1:9999/install
docker-compose -f docker-compose.yml restart webstack-go-service
docker-compose -f docker-compose.yml stop webstack-go-service
docker-compose -f docker-compose.yml rm webstack-go-service
docker-compose -f docker-compose.yml up -d

导致的问题: 即使我把webstack-go-mysql的数据持久化了

    volumes:
      - /var/lib/mysql:/var/lib/mysql

只要是有初始化过的数据库,重启是起不来的。

ch3nnn commented 1 year ago

可以在webstack-go-service 容器里面创建INSTALL.lock文件。这个文件表示项目安装完成标识, 初始化数据表结构和数据。

docker exec -it webstack-go-service sh
touch INSTALL.lock
exit
docker restart webstack-go-service
ch3nnn commented 1 year ago

已修复。可以 clone 最新代码。 @likuankuan

likuankuan commented 1 year ago

好的,非常感谢。