dockerapi 0.10.0 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,46 +1,55 @@
1
- module Docker
2
- module API
3
- class Exec < Docker::API::Base
1
+ ##
2
+ # This class represents the Docker API exec related endpoints.
3
+ # @see https://docs.docker.com/engine/api/v1.40/#tag/Exec
4
+ class Docker::API::Exec < Docker::API::Base
4
5
 
5
- def create name, body = {}
6
- validate Docker::API::InvalidRequestBody, [:AttachStdin, :AttachStdout, :AttachStderr, :DetachKeys, :Tty, :Env, :Cmd, :Privileged, :User, :WorkingDir], body
7
- @connection.request(method: :post, path: "/containers/#{name}/exec", headers: {"Content-Type": "application/json"}, body: body.to_json )
8
- end
9
-
10
- def start name, body = {}
11
- validate Docker::API::InvalidRequestBody, [:Detach, :Tty], body
12
-
13
- stream = ""
14
- response = @connection.request(method: :post,
15
- path: "/exec/#{name}/start",
16
- headers: {"Content-Type": "application/json"},
17
- body: body.to_json,
18
- response_block: lambda { |chunk, remaining_bytes, total_bytes| stream += chunk.to_s.encode('UTF-8', invalid: :replace, undef: :replace, replace: '?') }
19
- )
20
- response.data.merge!({stream: stream})
21
- response
22
- end
6
+ ##
7
+ # Run a command inside a running container.
8
+ #
9
+ # Docker API: POST /containers/{id}/exec
10
+ # @see https://docs.docker.com/engine/api/v1.40/#operation/ContainerExec
11
+ #
12
+ # @param name [String]: The ID or name of the container.
13
+ # @param body [Hash]: Request body to be sent as json.
14
+ def create name, body = {}
15
+ @connection.request(method: :post, path: "/containers/#{name}/exec", headers: {"Content-Type": "application/json"}, body: body.to_json )
16
+ end
23
17
 
24
- def resize name, params = {}
25
- validate Docker::API::InvalidParameter, [:w, :h], params
26
- @connection.post(build_path("/exec/#{name}/resize", params))
27
- end
18
+ ##
19
+ # Starts a previously set up exec instance.
20
+ #
21
+ # Docker API: POST /exec/{id}/start
22
+ # @see https://docs.docker.com/engine/api/v1.40/#operation/ExecStart
23
+ #
24
+ # @param name [String]: Exec instance ID.
25
+ # @param body [Hash]: Request body to be sent as json.
26
+ # @param &block: Replace the default output to stdout behavior.
27
+ def start name, body = {}, &block
28
+ @connection.request(method: :post, path: "/exec/#{name}/start", headers: {"Content-Type": "application/json"}, body: body.to_json,
29
+ response_block: block_given? ? block.call : default_streamer )
30
+ end
28
31
 
29
- def details name
30
- @connection.get("/exec/#{name}/json")
31
- end
32
-
33
- #################################################
34
- # Items in this area to be removed before 1.0.0 #
35
- #################################################
36
- def inspect *args
37
- return super.inspect if args.size == 0
38
- warn "WARNING: #inspect is deprecated and will be removed in the future, please use #details instead."
39
- name = args[0]
40
- details(name)
41
- end
42
- #################################################
32
+ ##
33
+ # Resize the TTY session used by an exec instance.
34
+ #
35
+ # Docker API: POST /exec/{id}/resize
36
+ # @see https://docs.docker.com/engine/api/v1.40/#operation/ExecResize
37
+ #
38
+ # @param name [String]: Exec instance ID.
39
+ # @param body [Hash]: Request body to be sent as json.
40
+ def resize name, params = {}
41
+ @connection.post(build_path("/exec/#{name}/resize", params))
42
+ end
43
43
 
44
- end
44
+ ##
45
+ # Return low-level information about an exec instance.
46
+ #
47
+ # Docker API: GET /exec/{id}/json
48
+ # @see https://docs.docker.com/engine/api/v1.40/#operation/ExecInspect
49
+ #
50
+ # @param name [String]: Exec instance ID.
51
+ def details name
52
+ @connection.get("/exec/#{name}/json")
45
53
  end
54
+
46
55
  end
@@ -1,148 +1,205 @@
1
- require "base64"
2
- require "json"
3
- require 'fileutils'
4
- module Docker
5
- module API
6
- CommitBody = [:Hostname, :Domainname, :User, :AttachStdin, :AttachStdout, :AttachStderr, :ExposedPorts, :Tty, :OpenStdin, :StdinOnce, :Env, :Cmd, :HealthCheck, :ArgsEscaped, :Image, :Volumes, :WorkingDir, :Entrypoint, :NetworkDisabled, :MacAddress, :OnBuild, :Labels, :StopSignal, :StopTimeout, :Shell]
7
- BuildParams = [:dockerfile, :t, :extrahosts, :remote, :q, :nocache, :cachefrom, :pull, :rm, :forcerm, :memory, :memswap, :cpushares, :cpusetcpus, :cpuperiod, :cpuquota, :buildargs, :shmsize, :squash, :labels, :networkmode, :platform, :target, :outputs]
8
- class Image < Docker::API::Base
9
-
10
- def details name
11
- @connection.get(build_path([name, "json"]))
12
- end
13
-
14
- def history name
15
- @connection.get(build_path([name, "history"]))
16
- end
17
-
18
- def list params = {}
19
- validate Docker::API::InvalidParameter, [:all, :filters, :digests], params
20
- @connection.get(build_path(["json"], params))
21
- end
22
-
23
- def search params = {}
24
- validate Docker::API::InvalidParameter, [:term, :limit, :filters], params
25
- @connection.get(build_path(["search"], params))
26
- end
27
-
28
- def tag name, params = {}
29
- validate Docker::API::InvalidParameter, [:repo, :tag], params
30
- @connection.post(build_path([name, "tag"], params))
31
- end
32
-
33
- def prune params = {}
34
- validate Docker::API::InvalidParameter, [:filters], params
35
- @connection.post(build_path(["prune"], params))
36
- end
37
-
38
- def remove name, params = {}
39
- validate Docker::API::InvalidParameter, [:force, :noprune], params
40
- @connection.delete(build_path([name], params))
41
- end
42
-
43
- def export name, path = "exported_image"
44
- file = File.open("/tmp/exported-image", "wb")
45
- streamer = lambda do |chunk, remaining_bytes, total_bytes|
46
- file.write(chunk)
47
- end
48
- response = @connection.request(method: :get, path: build_path([name, "get"]) , response_block: streamer)
49
- file.close
50
- response.status == 200 ? FileUtils.mv("/tmp/exported-image", File.expand_path(path)) : FileUtils.rm("/tmp/exported-image")
51
- response
52
- end
53
-
54
- def import path, params = {}
55
- validate Docker::API::InvalidParameter, [:quiet], params
56
- file = File.open(File.expand_path(path), "r")
57
- response = @connection.request(method: :post, path: build_path(["load"], params) , headers: {"Content-Type" => "application/x-tar"}, request_block: lambda { file.read(Excon.defaults[:chunk_size]).to_s} )
58
- file.close
59
- response
60
- end
61
-
62
- def push name, params = {}, authentication = {}
63
- validate Docker::API::InvalidParameter, [:tag], params
64
-
65
- if authentication.keys.size > 0
66
- @connection.request(method: :post, path: build_path([name, "push"], params), headers: { "X-Registry-Auth" => Base64.urlsafe_encode64(authentication.to_json.to_s).chomp } )
67
- else
68
- raise Docker::API::Error.new("Provide authentication parameters to push an image")
69
- end
70
- end
71
-
72
- def commit params = {}, body = {}
73
- validate Docker::API::InvalidParameter, [:container, :repo, :tag, :comment, :author, :pause, :changes], params
74
- validate Docker::API::InvalidRequestBody, Docker::API::CommitBody, body
75
- container = Docker::API::Container.new.details(params[:container])
76
- return container if [404, 301].include? container.status
77
- body = JSON.parse(container.body)["Config"].merge(body)
78
- @connection.request(method: :post, path: build_path("/commit", params), headers: {"Content-Type": "application/json"}, body: body.to_json)
79
- end
80
-
81
- def create params = {}, authentication = {}
82
- validate Docker::API::InvalidParameter, [:fromImage, :fromSrc, :repo, :tag, :message, :platform], params
83
-
84
- if authentication.keys.size > 0
85
- auth = Docker::API::System.new.auth(authentication)
86
- return auth unless [200, 204].include? auth.status
87
- @connection.request(method: :post, path: build_path(["create"], params), headers: { "X-Registry-Auth" => Base64.encode64(authentication.to_json.to_s).chomp } )
88
- elsif params.has_key? :fromSrc
89
- if params[:fromSrc].match(/^(http|https)/)
90
- @connection.request(method: :post, path: build_path(["create"], params))
91
- else
92
- file = File.open(File.expand_path(params[:fromSrc]), "r")
93
- params[:fromSrc] = "-"
94
- response = @connection.request(method: :post, path: build_path(["create"], params) , headers: {"Content-Type" => "application/x-tar"}, request_block: lambda { file.read(Excon.defaults[:chunk_size]).to_s} )
95
- file.close
96
- response
97
- end
98
- else
99
- @connection.post(build_path(["create"], params))
100
- end
101
- end
102
-
103
- def build path, params = {}, authentication = {}
104
- raise Docker::API::Error.new("Expected path or params[:remote]") unless path || params[:remote]
105
- validate Docker::API::InvalidParameter, Docker::API::BuildParams, params
106
-
107
- header = {"Content-type": "application/x-tar"}
108
- if authentication.keys.size > 0
109
- authentication.each_key do |server|
110
- auth = Docker::API::System.new.auth({username: authentication[server][:username] ,password:authentication[server][:password], serveraddress: server})
111
- return auth unless [200, 204].include? auth.status
112
- end
113
- header.merge!({"X-Registry-Config": Base64.urlsafe_encode64(authentication.to_json.to_s).chomp})
114
- end
115
-
116
- begin
117
- file = File.open( File.expand_path( path ) , "r")
118
- response = @connection.request(method: :post, path: build_path("/build", params), headers: header, request_block: lambda { file.read(Excon.defaults[:chunk_size]).to_s})
119
- file.close
120
- rescue
121
- response = @connection.request(method: :post, path: build_path("/build", params), headers: header)
122
- end
123
- response
124
- end
125
-
126
- def delete_cache params = {}
127
- validate Docker::API::InvalidParameter, [:all, "keep-storage", :filters], params
128
- @connection.post(build_path("/build/prune", params))
129
- end
130
-
131
- #################################################
132
- # Items in this area to be removed before 1.0.0 #
133
- #################################################
134
- def base_path
135
- "/images"
136
- end
137
-
138
- def inspect *args
139
- return super.inspect if args.size == 0
140
- warn "WARNING: #inspect is deprecated and will be removed in the future, please use #details instead."
141
- name = args[0]
142
- details(name)
143
- end
144
- #################################################
1
+ ##
2
+ # This class represents the Docker API endpoints regarding images.
3
+ # @see https://docs.docker.com/engine/api/v1.40/#tag/Image
4
+ class Docker::API::Image < Docker::API::Base
5
+
6
+ ##
7
+ # Return low-level information about an image.
8
+ #
9
+ # Docker API: GET /images/{name}/json
10
+ # @see https://docs.docker.com/engine/api/v1.40/#operation/ImageInspect
11
+ #
12
+ # @param name [String]: The ID or name of the image.
13
+ def details name
14
+ @connection.get("/images/#{name}/json")
15
+ end
16
+
17
+ ##
18
+ # Return image digest and platform information by contacting the registry.
19
+ #
20
+ # Docker API: GET /distribution/{name}/json
21
+ # @see https://docs.docker.com/engine/api/v1.40/#tag/Distribution
22
+ #
23
+ # @param name [String]: The ID or name of the image.
24
+ def distribution name
25
+ @connection.get("/distribution/#{name}/json")
26
+ end
27
+
28
+ ##
29
+ # Return parent layers of an image.
30
+ #
31
+ # Docker API: GET /images/{name}/history
32
+ # @see https://docs.docker.com/engine/api/v1.40/#operation/ImageHistory
33
+ #
34
+ # @param name [String]: The ID or name of the image.
35
+ def history name
36
+ @connection.get("/images/#{name}/history")
37
+ end
38
+
39
+ ##
40
+ # Returns a list of images on the server. Note that it uses a different, smaller representation of an image than inspecting a single image.
41
+ #
42
+ # Docker API: GET /images/json
43
+ # @see https://docs.docker.com/engine/api/v1.40/#operation/ImageList
44
+ #
45
+ # @param params [Hash]: Parameters that are appended to the URL.
46
+ def list params = {}
47
+ @connection.get(build_path("/images/json", params))
48
+ end
49
+
50
+ ##
51
+ # Search for an image on Docker Hub.
52
+ #
53
+ # Docker API: GET /images/search
54
+ # @see https://docs.docker.com/engine/api/v1.40/#operation/ImageSearch
55
+ #
56
+ # @param params [Hash]: Parameters that are appended to the URL.
57
+ def search params = {}
58
+ @connection.get(build_path("/images/search", params))
59
+ end
60
+
61
+ ##
62
+ # Tag an image so that it becomes part of a repository.
63
+ #
64
+ # Docker API: POST /images/{name}/tag
65
+ # @see https://docs.docker.com/engine/api/v1.40/#operation/ImageTag
66
+ #
67
+ # @param name [String]: The ID or name of the image.
68
+ # @param params [Hash]: Parameters that are appended to the URL.
69
+ def tag name, params = {}
70
+ @connection.post(build_path("/images/#{name}/tag", params))
71
+ end
72
+
73
+ ##
74
+ # Delete unused images.
75
+ #
76
+ # Docker API: POST /images/prune
77
+ # @see https://docs.docker.com/engine/api/v1.40/#operation/ImagePrune
78
+ #
79
+ # @param params [Hash]: Parameters that are appended to the URL.
80
+ def prune params = {}
81
+ @connection.post(build_path("/images/prune", params))
82
+ end
83
+
84
+ ##
85
+ # Remove an image, along with any untagged parent images that were referenced by that image.
86
+ #
87
+ # Images can't be removed if they have descendant images, are being used by a running container or are being used by a build.
88
+ #
89
+ # Docker API: DELETE /images/{name}
90
+ # @see https://docs.docker.com/engine/api/v1.40/#operation/ImageDelete
91
+ #
92
+ # @param name [String]: The ID or name of the image.
93
+ # @param params [Hash]: Parameters that are appended to the URL.
94
+ def remove name, params = {}
95
+ @connection.delete(build_path("/images/#{name}", params))
96
+ end
97
+
98
+ ##
99
+ # Export an image.
100
+ #
101
+ # Docker API: GET /images/{name}/get
102
+ # @see https://docs.docker.com/engine/api/v1.40/#operation/ImageGet
103
+ #
104
+ # @param name [String]: The ID or name of the image.
105
+ # @param path [String]: Path to the exported file.
106
+ # @param &block: Replace the default file writing behavior.
107
+ def export name, path, &block
108
+ @connection.request(method: :get, path: build_path("/images/#{name}/get") , response_block: block_given? ? block.call : default_writer(path))
109
+ end
110
+
111
+ ##
112
+ # Import images.
113
+ #
114
+ # Docker API: POST /images/load
115
+ # @see https://docs.docker.com/engine/api/v1.40/#operation/ImageLoad
116
+ #
117
+ # @param name [String]: The ID or name of the image.
118
+ # @param params [Hash]: Parameters that are appended to the URL.
119
+ def import path, params = {}
120
+ default_reader(path, build_path("/images/load", params))
121
+ end
122
+
123
+ ##
124
+ # Push an image to a registry.
125
+ #
126
+ # Docker API: POST /images/{name}/push
127
+ # @see https://docs.docker.com/engine/api/v1.40/#operation/ImagePush
128
+ #
129
+ # @param name [String]: The ID or name of the image.
130
+ # @param params [Hash]: Parameters that are appended to the URL.
131
+ # @param authentication [Hash]: Authentication parameters.
132
+ def push name, params = {}, authentication = {}
133
+ raise Docker::API::Error.new("Provide authentication parameters to push an image") unless authentication.keys.size > 0
134
+ @connection.request(method: :post, path: build_path("/images/#{name}/push", params), headers: { "X-Registry-Auth" => Base64.urlsafe_encode64(authentication.to_json.to_s).chomp } )
135
+ end
145
136
 
137
+ ##
138
+ # Create a new image from a container.
139
+ #
140
+ # Docker API: POST /commit
141
+ # @see https://docs.docker.com/engine/api/v1.40/#operation/ImageCommit
142
+ #
143
+ # @param params [Hash]: Parameters that are appended to the URL.
144
+ # @param body [Hash]: Request body to be sent as json.
145
+ def commit params = {}, body = {}
146
+ container = Docker::API::Container.new.details(params[:container])
147
+ return container if [404, 301].include? container.status
148
+ @connection.request(method: :post, path: build_path("/commit", params), headers: {"Content-Type": "application/json"}, body: container.json["Config"].merge(body).to_json)
149
+ end
150
+
151
+ ##
152
+ # Create an image by either pulling it from a registry or importing it.
153
+ #
154
+ # Docker API: POST /images/create
155
+ # @see https://docs.docker.com/engine/api/v1.40/#operation/ImageCreate
156
+ #
157
+ # @param params [Hash]: Parameters that are appended to the URL.
158
+ # @param authentication [Hash]: Authentication parameters.
159
+ # @param &block: Replace the default output to stdout behavior.
160
+ def create params = {}, authentication = {}, &block
161
+ request = {method: :post, path: build_path("/images/create", params), response_block: block_given? ? block.call : default_streamer }
162
+ if params.has_key? :fromSrc and !params[:fromSrc].match(/^(http|https)/) # then it's using a tar file
163
+ path = params[:fromSrc]
164
+ params[:fromSrc] = "-"
165
+ default_reader(path, build_path("/images/create", params))
166
+ else
167
+ request[:headers] = { "X-Registry-Auth" => Base64.encode64(authentication.to_json.to_s).chomp } if authentication.keys.size > 0
168
+ @connection.request(request)
146
169
  end
147
170
  end
171
+
172
+ ##
173
+ # Build an image from a tar archive with a Dockerfile in it.
174
+ #
175
+ # Docker API: POST /build
176
+ # @see https://docs.docker.com/engine/api/v1.40/#operation/ImageBuild
177
+ #
178
+ # @param path [String]: Path to the tar file.
179
+ # @param params [Hash]: Parameters that are appended to the URL.
180
+ # @param authentication [Hash]: Authentication parameters.
181
+ # @param &block: Replace the default output to stdout behavior.
182
+ def build path, params = {}, authentication = {}, &block
183
+ raise Docker::API::Error.new("Expected path or params[:remote]") unless path || params[:remote]
184
+
185
+ headers = {"Content-type": "application/x-tar"}
186
+ headers.merge!({"X-Registry-Config": Base64.urlsafe_encode64(authentication.to_json.to_s).chomp}) if authentication.keys.size > 0
187
+
188
+ if path == nil and params.has_key? :remote
189
+ response = @connection.request(method: :post, path: build_path("/build", params), headers: headers, response_block: block_given? ? block.call : default_streamer)
190
+ else
191
+ default_reader(path, build_path("/build", params), headers)
192
+ end
193
+ end
194
+
195
+ ##
196
+ # Delete builder cache.
197
+ #
198
+ # Docker API: POST /build/prune
199
+ # @see https://docs.docker.com/engine/api/v1.40/#operation/BuildPrune
200
+ #
201
+ # @param params [Hash]: Parameters that are appended to the URL.
202
+ def delete_cache params = {}
203
+ @connection.post(build_path("/build/prune", params))
204
+ end
148
205
  end
@@ -1,56 +1,86 @@
1
- module Docker
2
- module API
3
- class Network < Docker::API::Base
4
-
5
- def list params = {}
6
- validate Docker::API::InvalidParameter, [:filters], params
7
- @connection.get(build_path("/networks", params))
8
- end
9
-
10
- def details name, params = {}
11
- validate Docker::API::InvalidParameter, [:verbose, :scope], params
12
- @connection.get(build_path([name], params))
13
- end
14
-
15
- def create body = {}
16
- validate Docker::API::InvalidRequestBody, [:Name, :CheckDuplicate, :Driver, :Internal, :Attachable, :Ingress, :IPAM, :EnableIPv6, :Options, :Labels], body
17
- @connection.request(method: :post, path: build_path(["create"]), headers: {"Content-Type": "application/json"}, body: body.to_json)
18
- end
19
-
20
- def remove name
21
- @connection.delete(build_path([name]))
22
- end
23
-
24
- def prune params = {}
25
- validate Docker::API::InvalidParameter, [:filters], params
26
- @connection.post(build_path(["prune"], params))
27
- end
28
-
29
- def connect name, body = {}
30
- validate Docker::API::InvalidRequestBody, [:Container, :EndpointConfig], body
31
- @connection.request(method: :post, path: build_path([name, "connect"]), headers: {"Content-Type": "application/json"}, body: body.to_json)
32
- end
33
-
34
- def disconnect name, body = {}
35
- validate Docker::API::InvalidRequestBody, [:Container, :Force], body
36
- @connection.request(method: :post, path: build_path([name, "disconnect"]), headers: {"Content-Type": "application/json"}, body: body.to_json)
37
- end
38
-
39
- #################################################
40
- # Items in this area to be removed before 1.0.0 #
41
- #################################################
42
- def base_path
43
- "/networks"
44
- end
45
-
46
- def inspect *args
47
- return super.inspect if args.size == 0
48
- warn "WARNING: #inspect is deprecated and will be removed in the future, please use #details instead."
49
- name, params = args[0], args[1] || {}
50
- details(name, params)
51
- end
52
- #################################################
53
-
54
- end
1
+ ##
2
+ # This class represents the Docker API endpoints regarding networks.
3
+ # @see https://docs.docker.com/engine/api/v1.40/#tag/Network
4
+ class Docker::API::Network < Docker::API::Base
5
+
6
+ ##
7
+ # List networks.
8
+ #
9
+ # Docker API: GET /networks
10
+ # @see https://docs.docker.com/engine/api/v1.40/#operation/NetworkList
11
+ #
12
+ # @param params [Hash]: Parameters that are appended to the URL.
13
+ def list params = {}
14
+ @connection.get(build_path("/networks", params))
15
+ end
16
+
17
+ ##
18
+ # Inspect a network.
19
+ #
20
+ # Docker API: GET /networks/{id}
21
+ # @see https://docs.docker.com/engine/api/v1.40/#operation/NetworkInspect
22
+ #
23
+ # @param name [String]: The ID or name of the network.
24
+ # @param params [Hash]: Parameters that are appended to the URL.
25
+ def details name, params = {}
26
+ @connection.get(build_path("/networks/#{name}", params))
27
+ end
28
+
29
+ ##
30
+ # Create a network.
31
+ #
32
+ # Docker API: POST /networks/create
33
+ # @see https://docs.docker.com/engine/api/v1.40/#operation/NetworkCreate
34
+ #
35
+ # @param body [Hash]: Request body to be sent as json.
36
+ def create body = {}
37
+ @connection.request(method: :post, path: "/networks/create", headers: {"Content-Type": "application/json"}, body: body.to_json)
38
+ end
39
+
40
+ ##
41
+ # Remove a network.
42
+ #
43
+ # Docker API: DELETE /networks/{id}
44
+ # @see https://docs.docker.com/engine/api/v1.40/#operation/NetworkDelete
45
+ #
46
+ # @param name [String]: The ID or name of the network.
47
+ def remove name
48
+ @connection.delete("/networks/#{name}")
55
49
  end
50
+
51
+ ##
52
+ # Delete unused networks.
53
+ #
54
+ # Docker API: POST /networks/prune
55
+ # @see https://docs.docker.com/engine/api/v1.40/#operation/NetworkPrune
56
+ #
57
+ # @param params [Hash]: Parameters that are appended to the URL.
58
+ def prune params = {}
59
+ @connection.post(build_path("/networks/prune", params))
60
+ end
61
+
62
+ ##
63
+ # Connect a container to a network.
64
+ #
65
+ # Docker API: POST /networks/{id}/connect
66
+ # @see https://docs.docker.com/engine/api/v1.40/#operation/NetworkConnect
67
+ #
68
+ # @param name [String]: The ID or name of the network.
69
+ # @param body [Hash]: Request body to be sent as json.
70
+ def connect name, body = {}
71
+ @connection.request(method: :post, path: "/networks/#{name}/connect", headers: {"Content-Type": "application/json"}, body: body.to_json)
72
+ end
73
+
74
+ ##
75
+ # Disconnect a container from a network.
76
+ #
77
+ # Docker API: POST /networks/{id}/disconnect
78
+ # @see https://docs.docker.com/engine/api/v1.40/#operation/NetworkDisconnect
79
+ #
80
+ # @param name [String]: The ID or name of the network.
81
+ # @param body [Hash]: Request body to be sent as json.
82
+ def disconnect name, body = {}
83
+ @connection.request(method: :post, path: "/networks/#{name}/disconnect", headers: {"Content-Type": "application/json"}, body: body.to_json)
84
+ end
85
+
56
86
  end