| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- package docker
- import (
- "fmt"
- "github.com/docker/docker/api/types/container"
- "github.com/docker/go-connections/nat"
- "goseg/config"
- "os"
- "path/filepath"
- )
- func LoadNetdata() error {
- logger.Info("Loading NetData container")
- confPath := filepath.Join(config.BasePath, "settings", "netdata.json")
- _, err := os.Open(confPath)
- if err != nil {
- // create a default if it doesn't exist
- err = config.CreateDefaultNetdataConf()
- if err != nil {
- // panic if we can't create it
- errmsg := fmt.Sprintf("Unable to create NetData config! %v", err)
- logger.Error(errmsg)
- panic(errmsg)
- }
- }
- logger.Info("Running NetData")
- info, err := StartContainer("netdata", "netdata")
- if err != nil {
- logger.Error(fmt.Sprintf("Error starting NetData: %v", err))
- return err
- }
- config.UpdateContainerState("netdata", info)
- return nil
- }
- // netdata container config builder
- func netdataContainerConf() (container.Config, container.HostConfig, error) {
- var containerConfig container.Config
- var hostConfig container.HostConfig
- // construct the container metadata from version server info
- containerInfo, err := GetLatestContainerInfo("netdata")
- if err != nil {
- return containerConfig, hostConfig, err
- }
- desiredTag := containerInfo["tag"]
- desiredHash := containerInfo["hash"]
- desiredRepo := containerInfo["repo"]
- desiredImage := fmt.Sprintf("%s:%s@sha256:%s", desiredRepo, desiredTag, desiredHash)
- // construct the container config struct
- containerConfig = container.Config{
- Image: desiredImage,
- ExposedPorts: nat.PortSet{"19999/tcp": struct{}{}},
- Volumes: map[string]struct{}{
- "/etc/netdata": {},
- "/var/lib/netdata": {},
- "/var/cache/netdata": {},
- "/host/etc/passwd": {},
- "/host/etc/group": {},
- "/host/proc": {},
- "/host/sys": {},
- "/host/etc/os-release": {},
- },
- }
- hostConfig = container.HostConfig{
- CapAdd: []string{"SYS_PTRACE"},
- RestartPolicy: container.RestartPolicy{
- Name: "unless-stopped",
- },
- SecurityOpt: []string{"apparmor=unconfined"},
- PortBindings: nat.PortMap{
- "19999/tcp": []nat.PortBinding{
- {HostIP: "0.0.0.0", HostPort: "19999"},
- },
- },
- Binds: []string{
- "netdataconfig:/etc/netdata",
- "netdatalib:/var/lib/netdata",
- "netdatacache:/var/cache/netdata",
- "/etc/passwd:/host/etc/passwd:ro",
- "/etc/group:/host/etc/group:ro",
- "/proc:/host/proc:ro",
- "/sys:/host/sys:ro",
- "/etc/os-release:/host/etc/os-release:ro",
- },
- }
- return containerConfig, hostConfig, nil
- }
|