1
0

docker.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package main
  2. import (
  3. "context"
  4. "encoding/json"
  5. "net/http"
  6. "github.com/docker/docker/api/types"
  7. "github.com/docker/docker/api/types/container"
  8. "github.com/docker/docker/client"
  9. "imuslab.com/zoraxy/mod/utils"
  10. )
  11. // HandleDockerAvaible check if teh docker related functions should be avaible in front-end
  12. func HandleDockerAvailable(w http.ResponseWriter, r *http.Request) {
  13. js, _ := json.Marshal(*runningInDocker)
  14. utils.SendJSONResponse(w, string(js))
  15. }
  16. // handleDockerContainersList return the current list of docker containers
  17. // currently listening to the same bridge network interface. See PR #202 for details.
  18. func HandleDockerContainersList(w http.ResponseWriter, r *http.Request) {
  19. apiClient, err := client.NewClientWithOpts(client.WithVersion("1.43"))
  20. if err != nil {
  21. SystemWideLogger.PrintAndLog("Docker", "Unable to create new docker client", err)
  22. utils.SendErrorResponse(w, "Docker client initiation failed")
  23. return
  24. }
  25. defer apiClient.Close()
  26. containers, err := apiClient.ContainerList(context.Background(), container.ListOptions{All: true})
  27. if err != nil {
  28. SystemWideLogger.PrintAndLog("Docker", "List docker container failed", err)
  29. utils.SendErrorResponse(w, "List docker container failed")
  30. return
  31. }
  32. networks, err := apiClient.NetworkList(context.Background(), types.NetworkListOptions{})
  33. if err != nil {
  34. SystemWideLogger.PrintAndLog("Docker", "List docker network failed", err)
  35. utils.SendErrorResponse(w, "List docker network failed")
  36. return
  37. }
  38. result := map[string]interface{}{
  39. "network": networks,
  40. "containers": containers,
  41. }
  42. js, err := json.Marshal(result)
  43. if err != nil {
  44. utils.SendErrorResponse(w, err.Error())
  45. return
  46. }
  47. utils.SendJSONResponse(w, string(js))
  48. }