docker.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  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. utils.SendErrorResponse(w, err.Error())
  22. return
  23. }
  24. defer apiClient.Close()
  25. containers, err := apiClient.ContainerList(context.Background(), container.ListOptions{All: true})
  26. if err != nil {
  27. utils.SendErrorResponse(w, err.Error())
  28. return
  29. }
  30. networks, err := apiClient.NetworkList(context.Background(), types.NetworkListOptions{})
  31. if err != nil {
  32. utils.SendErrorResponse(w, err.Error())
  33. return
  34. }
  35. result := map[string]interface{}{
  36. "network": networks,
  37. "containers": containers,
  38. }
  39. js, err := json.Marshal(result)
  40. if err != nil {
  41. utils.SendErrorResponse(w, err.Error())
  42. return
  43. }
  44. utils.SendJSONResponse(w, string(js))
  45. }