mirror of
https://github.com/yusing/godoxy.git
synced 2025-05-20 20:52:33 +02:00
90 lines
2 KiB
Go
90 lines
2 KiB
Go
package docker
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/docker/docker/api/types"
|
|
"github.com/yusing/go-proxy/internal/utils/strutils"
|
|
)
|
|
|
|
type containerHelper struct {
|
|
*types.Container
|
|
}
|
|
|
|
// getDeleteLabel gets the value of a label and then deletes it from the container.
|
|
// If the label does not exist, an empty string is returned.
|
|
func (c containerHelper) getDeleteLabel(label string) string {
|
|
if l, ok := c.Labels[label]; ok {
|
|
delete(c.Labels, label)
|
|
return l
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func (c containerHelper) getAliases() []string {
|
|
if l := c.getDeleteLabel(LabelAliases); l != "" {
|
|
return strutils.CommaSeperatedList(l)
|
|
}
|
|
return []string{c.getName()}
|
|
}
|
|
|
|
func (c containerHelper) getName() string {
|
|
return strings.TrimPrefix(c.Names[0], "/")
|
|
}
|
|
|
|
func (c containerHelper) getImageName() string {
|
|
colonSep := strutils.SplitRune(c.Image, ':')
|
|
slashSep := strutils.SplitRune(colonSep[0], '/')
|
|
return slashSep[len(slashSep)-1]
|
|
}
|
|
|
|
func (c containerHelper) getPublicPortMapping() PortMapping {
|
|
res := make(PortMapping)
|
|
for _, v := range c.Ports {
|
|
if v.PublicPort == 0 {
|
|
continue
|
|
}
|
|
res[strutils.PortString(v.PublicPort)] = v
|
|
}
|
|
return res
|
|
}
|
|
|
|
func (c containerHelper) getPrivatePortMapping() PortMapping {
|
|
res := make(PortMapping)
|
|
for _, v := range c.Ports {
|
|
res[strutils.PortString(v.PrivatePort)] = v
|
|
}
|
|
return res
|
|
}
|
|
|
|
var databaseMPs = map[string]struct{}{
|
|
"/var/lib/postgresql/data": {},
|
|
"/var/lib/mysql": {},
|
|
"/var/lib/mongodb": {},
|
|
"/var/lib/mariadb": {},
|
|
"/var/lib/memcached": {},
|
|
"/var/lib/rabbitmq": {},
|
|
}
|
|
|
|
var databasePrivPorts = map[uint16]struct{}{
|
|
5432: {}, // postgres
|
|
3306: {}, // mysql, mariadb
|
|
6379: {}, // redis
|
|
11211: {}, // memcached
|
|
27017: {}, // mongodb
|
|
}
|
|
|
|
func (c containerHelper) isDatabase() bool {
|
|
for _, m := range c.Mounts {
|
|
if _, ok := databaseMPs[m.Destination]; ok {
|
|
return true
|
|
}
|
|
}
|
|
|
|
for _, v := range c.Ports {
|
|
if _, ok := databasePrivPorts[v.PrivatePort]; ok {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|