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