daemon的配置,网络部分的内容在cmd/dockerd/config_common_unix.go中指定,默认设置通常都为空docker
// daemon/daemon_unix.goapi
一、func (daemon *Daemon) initNetworkController(config *config.Config, activeSandboxes map[string]interface{}) (libnetwork.NetworkController, error)网络
二、daemon/daemon.go函数
func (daemon *Daemon) networkOptions(dconfig *config.Config, pg plugingetter.PluginGetter, activeSandboxes map[string]interface{}) ([]nwconfig.Option, error)ui
三、daemon/daemon_unix.go.net
func initBridgeDriver(controller libnetwork.NetworkController, config *config.Config) errorunix
Container结构与网络相关的部分以下所示:blog
// container/container.goci
type Container struct {get
....
NetworkSettings *network.Settings
HostConfig *containertypes.HostConfig
...
}
network.Setting结构以下所示:
// daemon/network/settings.go
type Settings struct {
...
Networks map[string]*EndpointSettings ---> 它只是对docker/api/types/network中的EndpointSettings的封装
...
}
EndpointSettings的结构以下所示,其中存储了network endpoint的细节信息:
// api/types/network/network.go
type EndpointSettings struct {
// Configurations
IPAMConfig *EndpointIPAMConfig
Links []string
Aliases []string
// Operational data
NetworkID string
EndpointID string
Gateway string
IPAddress string
.....
}
// daemon/start.go
一、func (daemon *Daemon) containerStart(container *container.Container, ....) (err error)
// daemon/container_operations.go
二、func (daemon *Daemon) initializeNetworking(container *container.Container) error
// daemon/container_operations.go
三、func (daemon *Daemon) allocateNetwork(container *container.Container) error
// daemon/container_operations.go
四、func (daemon *Daemon) updateContainerNetworkSettings(container *container.Container, endpointsConfig map[string]*networktypes.EndpointSettings)
// daemon/container_operations.go
五、func (daemon *Daemon) connectToNetwork(container *container.Container, idOrName string, endpointConfig *networktypes.EndpointSettings, updateSettings bool) (err error)
// api/types/types.go
NetworkCreateRequest结构以下所示:
type NetworkCreateRequest struct {
NetworkCreate
Name string
}
type NetworkCreate struct {
CheckDuplicate bool
Driver string
Scope string
EnableIPv6 bool
IPAM *network.IPAM
Internal bool
Attachable bool
Ingress bool
ConfigOnly bool
ConfigFrom *network.ConfigReference
Options map[string]string
Labels map[string]string
}
// daemon/network.go
一、func (daemon *Daemon) CreateNetwork(create types.NetworkCreateRequest) (*types.NetworkCreateResponse, error)
// daemon/network.go
二、func (daemon *Daemon) createNetwork(create types.NetworkCreateRequest, id string, agent bool) (*types.NetworkCreateResponse, error)
// daemon/network.go
一、func (daemon *Daemon) ConnectToNetwork(container, networkName string, endpointConfig *network.EndpointSettings) error
// daemon/container_operations.go
二、func (daemon *Daemon) ConnectToNetwork(container *container.Container, idOrName string, endpointConfig *networktypes.EndpointSettings) error
// daemon/container_operations.go
三、func (daemon *Daemon) connectToNetwork(container *container.Container, idOrName string, endpointConfig *networktypes.EndpointSettings, updateSettings bool) (err error)
networktypes.NetworkingConfig结构以下所示
// api/types/network/network.go
// NetworkingConfig represents the container's networking configuration for each of its interfaces // Carries the networking configs specified in the `docker run` and `docker network connect` commands type NetworkingConfig struct { EndpointsConfig map[string]*EndpointSettings // Endpoint configs for each connecting network }
// daemon/container_operations.go
四、func (daemon *Daemon) findAndAttachNetwork(container *container.Container, idOrName string, epConfig *networktypes.EndpointSettings) (libnetwork.Network, *networktypes.NetworkingConfig, error)
// container/container.go
五、func (container *Container) UpdateSandboxNetworkSettings(sb libnetwork.Sandbox) error