mirror of
https://github.com/bytedream/docker4ssh.git
synced 2025-06-27 09:50:31 +02:00
Initial commit
This commit is contained in:
86
server/docker/network.go
Normal file
86
server/docker/network.go
Normal file
@ -0,0 +1,86 @@
|
||||
package docker
|
||||
|
||||
import (
|
||||
"context"
|
||||
c "docker4ssh/config"
|
||||
"github.com/docker/docker/api/types"
|
||||
"github.com/docker/docker/api/types/network"
|
||||
"github.com/docker/docker/client"
|
||||
)
|
||||
|
||||
type Network map[NetworkMode]string
|
||||
|
||||
// InitNetwork initializes a new docker4ssh network
|
||||
func InitNetwork(ctx context.Context, cli *client.Client, config *c.Config) (Network, error) {
|
||||
n := Network{}
|
||||
|
||||
networks, err := cli.NetworkList(ctx, types.NetworkListOptions{})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, dockerNetwork := range networks {
|
||||
var mode NetworkMode
|
||||
|
||||
switch dockerNetwork.Name {
|
||||
case "none":
|
||||
mode = Off
|
||||
case "docker4ssh-iso":
|
||||
mode = Isolate
|
||||
case "bridge":
|
||||
mode = Host
|
||||
case "docker4ssh-def":
|
||||
mode = Docker
|
||||
case "host":
|
||||
mode = None
|
||||
default:
|
||||
continue
|
||||
}
|
||||
|
||||
n[mode] = dockerNetwork.ID
|
||||
}
|
||||
|
||||
if _, ok := n[Isolate]; !ok {
|
||||
// create a new network which isolates the container from the host,
|
||||
// but not from the network
|
||||
resp, err := cli.NetworkCreate(ctx, "docker4ssh-iso", types.NetworkCreate{
|
||||
CheckDuplicate: true,
|
||||
Driver: "bridge",
|
||||
EnableIPv6: false,
|
||||
IPAM: &network.IPAM{
|
||||
Driver: "default",
|
||||
Config: []network.IPAMConfig{
|
||||
{
|
||||
Subnet: config.Network.Isolate.Subnet,
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
n[Isolate] = resp.ID
|
||||
}
|
||||
|
||||
if _, ok := n[Docker]; !ok {
|
||||
// the standard network for all containers
|
||||
resp, err := cli.NetworkCreate(ctx, "docker4ssh-def", types.NetworkCreate{
|
||||
CheckDuplicate: true,
|
||||
Driver: "bridge",
|
||||
EnableIPv6: false,
|
||||
IPAM: &network.IPAM{
|
||||
Driver: "default",
|
||||
Config: []network.IPAMConfig{
|
||||
{
|
||||
Subnet: config.Network.Default.Subnet,
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
n[Docker] = resp.ID
|
||||
}
|
||||
|
||||
return n, nil
|
||||
}
|
Reference in New Issue
Block a user