mirror of
https://github.com/bytedream/docker4ssh.git
synced 2025-05-09 12:15:11 +02:00
87 lines
1.8 KiB
Go
87 lines
1.8 KiB
Go
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
|
|
}
|