docker.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. //go:build !windows
  2. // +build !windows
  3. package dockerux
  4. /* Windows docker optimizer*/
  5. import (
  6. "context"
  7. "encoding/json"
  8. "net/http"
  9. "github.com/docker/docker/api/types"
  10. "github.com/docker/docker/api/types/container"
  11. "github.com/docker/docker/client"
  12. "imuslab.com/zoraxy/mod/utils"
  13. )
  14. // Windows build not support docker
  15. func (d *UXOptimizer) HandleDockerAvailable(w http.ResponseWriter, r *http.Request) {
  16. js, _ := json.Marshal(d.RunninInDocker)
  17. utils.SendJSONResponse(w, string(js))
  18. }
  19. func (d *UXOptimizer) HandleDockerContainersList(w http.ResponseWriter, r *http.Request) {
  20. apiClient, err := client.NewClientWithOpts(client.WithVersion("1.43"))
  21. if err != nil {
  22. d.SystemWideLogger.PrintAndLog("Docker", "Unable to create new docker client", err)
  23. utils.SendErrorResponse(w, "Docker client initiation failed")
  24. return
  25. }
  26. defer apiClient.Close()
  27. containers, err := apiClient.ContainerList(context.Background(), container.ListOptions{All: true})
  28. if err != nil {
  29. d.SystemWideLogger.PrintAndLog("Docker", "List docker container failed", err)
  30. utils.SendErrorResponse(w, "List docker container failed")
  31. return
  32. }
  33. networks, err := apiClient.NetworkList(context.Background(), types.NetworkListOptions{})
  34. if err != nil {
  35. d.SystemWideLogger.PrintAndLog("Docker", "List docker network failed", err)
  36. utils.SendErrorResponse(w, "List docker network failed")
  37. return
  38. }
  39. result := map[string]interface{}{
  40. "network": networks,
  41. "containers": containers,
  42. }
  43. js, err := json.Marshal(result)
  44. if err != nil {
  45. utils.SendErrorResponse(w, err.Error())
  46. return
  47. }
  48. utils.SendJSONResponse(w, string(js))
  49. }