docker.go 1.6 KB

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