mirror of https://github.com/docker/docs.git
Add docker network create
Signed-off-by: Victor Vieux <vieux@docker.com>
This commit is contained in:
parent
8559fb0fc6
commit
b007cae8b2
|
|
@ -427,6 +427,25 @@ func deleteContainers(c *context, w http.ResponseWriter, r *http.Request) {
|
||||||
w.WriteHeader(http.StatusNoContent)
|
w.WriteHeader(http.StatusNoContent)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// POST /networks/create
|
||||||
|
func postNetworksCreate(c *context, w http.ResponseWriter, r *http.Request) {
|
||||||
|
var request dockerclient.NetworkCreate
|
||||||
|
|
||||||
|
if err := json.NewDecoder(r.Body).Decode(&request); err != nil {
|
||||||
|
httpError(w, err.Error(), http.StatusBadRequest)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
response, err := c.cluster.CreateNetwork(&request)
|
||||||
|
if err != nil {
|
||||||
|
httpError(w, err.Error(), http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
w.Header().Set("Content-Type", "application/json")
|
||||||
|
json.NewEncoder(w).Encode(response)
|
||||||
|
}
|
||||||
|
|
||||||
// POST /volumes
|
// POST /volumes
|
||||||
func postVolumes(c *context, w http.ResponseWriter, r *http.Request) {
|
func postVolumes(c *context, w http.ResponseWriter, r *http.Request) {
|
||||||
var request dockerclient.VolumeCreateRequest
|
var request dockerclient.VolumeCreateRequest
|
||||||
|
|
|
||||||
|
|
@ -75,6 +75,7 @@ var routes = map[string]map[string]handler{
|
||||||
"/containers/{name:.*}/exec": postContainersExec,
|
"/containers/{name:.*}/exec": postContainersExec,
|
||||||
"/exec/{execid:.*}/start": postExecStart,
|
"/exec/{execid:.*}/start": postExecStart,
|
||||||
"/exec/{execid:.*}/resize": proxyContainer,
|
"/exec/{execid:.*}/resize": proxyContainer,
|
||||||
|
"/networks/create": postNetworksCreate,
|
||||||
"/volumes": postVolumes,
|
"/volumes": postVolumes,
|
||||||
},
|
},
|
||||||
"PUT": {
|
"PUT": {
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,9 @@ type Cluster interface {
|
||||||
// Return all networks
|
// Return all networks
|
||||||
Networks() Networks
|
Networks() Networks
|
||||||
|
|
||||||
|
// Create a network
|
||||||
|
CreateNetwork(request *dockerclient.NetworkCreate) (*dockerclient.NetworkCreateResponse, error)
|
||||||
|
|
||||||
// Create a volume
|
// Create a volume
|
||||||
CreateVolume(request *dockerclient.VolumeCreateRequest) (*Volume, error)
|
CreateVolume(request *dockerclient.VolumeCreateRequest) (*Volume, error)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -542,6 +542,15 @@ func (e *Engine) RemoveContainer(container *Container, force, volumes bool) erro
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CreateNetwork creates a network in the engine
|
||||||
|
func (e *Engine) CreateNetwork(request *dockerclient.NetworkCreate) (*dockerclient.NetworkCreateResponse, error) {
|
||||||
|
response, err := e.client.CreateNetwork(request)
|
||||||
|
|
||||||
|
e.RefreshNetworks()
|
||||||
|
|
||||||
|
return response, err
|
||||||
|
}
|
||||||
|
|
||||||
// CreateVolume creates a volume in the engine
|
// CreateVolume creates a volume in the engine
|
||||||
func (e *Engine) CreateVolume(request *dockerclient.VolumeCreateRequest) (*Volume, error) {
|
func (e *Engine) CreateVolume(request *dockerclient.VolumeCreateRequest) (*Volume, error) {
|
||||||
volume, err := e.client.CreateVolume(request)
|
volume, err := e.client.CreateVolume(request)
|
||||||
|
|
|
||||||
|
|
@ -226,6 +226,11 @@ func (c *Cluster) RemoveImages(name string, force bool) ([]*dockerclient.ImageDe
|
||||||
return nil, errNotSupported
|
return nil, errNotSupported
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CreateNetwork creates a network in the cluster
|
||||||
|
func (c *Cluster) CreateNetwork(request *dockerclient.NetworkCreate) (*dockerclient.NetworkCreateResponse, error) {
|
||||||
|
return nil, errNotSupported
|
||||||
|
}
|
||||||
|
|
||||||
// CreateVolume creates a volume in the cluster
|
// CreateVolume creates a volume in the cluster
|
||||||
func (c *Cluster) CreateVolume(request *dockerclient.VolumeCreateRequest) (*cluster.Volume, error) {
|
func (c *Cluster) CreateVolume(request *dockerclient.VolumeCreateRequest) (*cluster.Volume, error) {
|
||||||
return nil, errNotSupported
|
return nil, errNotSupported
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ func (networks Networks) Get(IDOrName string) *Network {
|
||||||
|
|
||||||
// Match name, /name or engine/name.
|
// Match name, /name or engine/name.
|
||||||
for _, network := range networks {
|
for _, network := range networks {
|
||||||
if network.Engine.ID+"/"+network.Name == IDOrName || network.Engine.Name+"/"+network.Name == IDOrName {
|
if network.Name == IDOrName || network.Engine.ID+"/"+network.Name == IDOrName || network.Engine.Name+"/"+network.Name == IDOrName {
|
||||||
candidates = append(candidates, network)
|
candidates = append(candidates, network)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -48,7 +48,7 @@ func (networks Networks) Get(IDOrName string) *Network {
|
||||||
|
|
||||||
// Match name, /name or engine/name.
|
// Match name, /name or engine/name.
|
||||||
for _, network := range networks {
|
for _, network := range networks {
|
||||||
if network.Name == IDOrName || network.Name == "/"+IDOrName {
|
if network.Name == "/"+IDOrName {
|
||||||
return network
|
return network
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -329,6 +329,29 @@ func (c *Cluster) RemoveImages(name string, force bool) ([]*dockerclient.ImageDe
|
||||||
return out, err
|
return out, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CreateNetwork creates a network in the cluster
|
||||||
|
func (c *Cluster) CreateNetwork(request *dockerclient.NetworkCreate) (response *dockerclient.NetworkCreateResponse, err error) {
|
||||||
|
var (
|
||||||
|
parts = strings.SplitN(request.Name, "/", 2)
|
||||||
|
config = &cluster.ContainerConfig{}
|
||||||
|
)
|
||||||
|
|
||||||
|
if len(parts) == 2 {
|
||||||
|
// a node was specified, create the container only on this node
|
||||||
|
request.Name = parts[1]
|
||||||
|
config = cluster.BuildContainerConfig(dockerclient.ContainerConfig{Env: []string{"constraint:node==" + parts[0]}})
|
||||||
|
}
|
||||||
|
|
||||||
|
n, err := c.scheduler.SelectNodeForContainer(c.listNodes(), config)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if n != nil {
|
||||||
|
return c.engines[n.ID].CreateNetwork(request)
|
||||||
|
}
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
// CreateVolume creates a volume in the cluster
|
// CreateVolume creates a volume in the cluster
|
||||||
func (c *Cluster) CreateVolume(request *dockerclient.VolumeCreateRequest) (*cluster.Volume, error) {
|
func (c *Cluster) CreateVolume(request *dockerclient.VolumeCreateRequest) (*cluster.Volume, error) {
|
||||||
var (
|
var (
|
||||||
|
|
|
||||||
|
|
@ -29,21 +29,23 @@ function teardown() {
|
||||||
[ "${#lines[@]}" -eq 13 ]
|
[ "${#lines[@]}" -eq 13 ]
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "docker volume create" {
|
@test "docker network create" {
|
||||||
skip
|
|
||||||
start_docker 2
|
start_docker 2
|
||||||
swarm_manage
|
swarm_manage
|
||||||
|
|
||||||
run docker_swarm volume ls
|
run docker_swarm network ls
|
||||||
[ "${#lines[@]}" -eq 1 ]
|
[ "${#lines[@]}" -eq 7 ]
|
||||||
|
|
||||||
docker_swarm volume create --name=test_volume
|
docker_swarm network create -d bridge test1
|
||||||
run docker_swarm volume
|
run docker_swarm network ls
|
||||||
[ "${#lines[@]}" -eq 3 ]
|
[ "${#lines[@]}" -eq 8 ]
|
||||||
|
|
||||||
docker_swarm run -d -v=/tmp busybox true
|
docker_swarm network create -d bridge node-1/test2
|
||||||
run docker_swarm volume
|
run docker_swarm network ls
|
||||||
[ "${#lines[@]}" -eq 4 ]
|
[ "${#lines[@]}" -eq 9 ]
|
||||||
|
|
||||||
|
run docker_swarm network create -d bridge node-2/test3
|
||||||
|
[ "$status" -ne 0 ]
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "docker volume rm" {
|
@test "docker volume rm" {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue