docker-api 1.33.5 → 2.0.0.pre.1
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.
- checksums.yaml +5 -5
- data/README.md +5 -9
- data/lib/docker.rb +4 -15
- data/lib/docker/connection.rb +1 -1
- data/lib/docker/container.rb +19 -22
- data/lib/docker/event.rb +3 -1
- data/lib/docker/exec.rb +6 -6
- data/lib/docker/image.rb +17 -5
- data/lib/docker/network.rb +15 -11
- data/lib/docker/util.rb +10 -9
- data/lib/docker/version.rb +1 -4
- data/lib/docker/volume.rb +6 -1
- metadata +11 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 88fd03d58560759042d6b5513da603fa2db7e1553e47ddcd85cf6af9df34ecf5
|
4
|
+
data.tar.gz: cccb4daff0e134328e485a81862609371990697af2c36a4694cb9ba2053e8423
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ce528e7f874a062c36fc71c531fcc038501495a9cddd71b6187169ea2278e404cb6a9fdf9d07f39327613bde8c99403d093b471e7d56717b1cb93e21f1f26d10
|
7
|
+
data.tar.gz: 04f96ad64f0aab19bd1d96d8816b247f55530b110c8717e4ee24447036302ff3ddd79070768ede3858b1c08ebc3f91b998191d48980396c1ab94c47a0c25c4ba
|
data/README.md
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
docker-api
|
2
2
|
==========
|
3
|
-
[](https://badge.fury.io/rb/docker-api) [](https://travis-ci.org/swipely/docker-api) [](https://codeclimate.com/github/swipely/docker-api)
|
3
|
+
[](https://badge.fury.io/rb/docker-api) [](https://travis-ci.org/swipely/docker-api) [](https://codeclimate.com/github/swipely/docker-api)
|
4
4
|
|
5
|
-
This gem provides an object-oriented interface to the [Docker
|
5
|
+
This gem provides an object-oriented interface to the [Docker Engine API](https://docs.docker.com/develop/sdk/). Every method listed there is implemented. At the time of this writing, docker-api is meant to interface with Docker version 1.4.*
|
6
6
|
|
7
7
|
If you're interested in using Docker to package your apps, we recommend the [dockly](https://github.com/swipely/dockly) gem. Dockly provides a simple DSL for describing Docker containers that install as Debian packages and are controlled by upstart scripts.
|
8
8
|
|
@@ -36,7 +36,7 @@ docker-api is designed to be very lightweight. Almost no state is cached (aside
|
|
36
36
|
|
37
37
|
## Starting up
|
38
38
|
|
39
|
-
Follow the [installation instructions](https://docs.docker.com/
|
39
|
+
Follow the [installation instructions](https://docs.docker.com/install/), and then run:
|
40
40
|
|
41
41
|
```shell
|
42
42
|
$ sudo docker -d
|
@@ -52,7 +52,7 @@ If you're running Docker locally as a socket, there is no setup to do in Ruby. I
|
|
52
52
|
Docker.url = 'tcp://example.com:5422'
|
53
53
|
```
|
54
54
|
|
55
|
-
Two things to note here. The first is that this gem uses [excon](
|
55
|
+
Two things to note here. The first is that this gem uses [excon](https://github.com/excon/excon), so any of the options that are valid for `Excon.new` are also valid for `Docker.options`. Second, by default Docker runs on a socket. The gem will assume you want to connect to the socket unless you specify otherwise.
|
56
56
|
|
57
57
|
Also, you may set the above variables via `ENV` variables. For example:
|
58
58
|
|
@@ -413,7 +413,7 @@ container.read_file("/test")
|
|
413
413
|
|
414
414
|
# Export a Container. Since an export is typically at least 300M, chunks of the
|
415
415
|
# export are yielded instead of just returning the whole thing.
|
416
|
-
File.open('export.tar', 'w') do |
|
416
|
+
File.open('export.tar', 'w') do |file|
|
417
417
|
container.export { |chunk| file.write(chunk) }
|
418
418
|
end
|
419
419
|
# => nil
|
@@ -622,10 +622,6 @@ image 'repo:new_tag' => 'repo:tag' do
|
|
622
622
|
end
|
623
623
|
```
|
624
624
|
|
625
|
-
## Known issues
|
626
|
-
|
627
|
-
* If the docker daemon is always responding to your requests with a 400 Bad Request when using UNIX sockets, verify you're running Excon version 0.46.0 or greater. [Link](https://github.com/swipely/docker-api/issues/381)
|
628
|
-
|
629
625
|
## Not supported (yet)
|
630
626
|
|
631
627
|
* Generating a tarball of images and metadata for a repository specified by a name: https://docs.docker.com/engine/reference/api/docker_remote_api_v1.14/#get-a-tarball-containing-all-images-and-tags-in-a-repository
|
data/lib/docker.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'cgi'
|
2
|
-
require '
|
2
|
+
require 'multi_json'
|
3
3
|
require 'excon'
|
4
4
|
require 'tempfile'
|
5
5
|
require 'base64'
|
@@ -121,27 +121,16 @@ module Docker
|
|
121
121
|
|
122
122
|
# Login to the Docker registry.
|
123
123
|
def authenticate!(options = {}, connection = self.connection)
|
124
|
-
creds = options
|
125
|
-
connection.post('/auth', {}, :
|
124
|
+
creds = MultiJson.dump(options)
|
125
|
+
connection.post('/auth', {}, body: creds)
|
126
126
|
@creds = creds
|
127
127
|
true
|
128
128
|
rescue Docker::Error::ServerError, Docker::Error::UnauthorizedError
|
129
129
|
raise Docker::Error::AuthenticationError
|
130
130
|
end
|
131
131
|
|
132
|
-
# When the correct version of Docker is installed, returns true. Otherwise,
|
133
|
-
# raises a VersionError.
|
134
|
-
def validate_version!
|
135
|
-
Docker.info
|
136
|
-
true
|
137
|
-
rescue Docker::Error::TimeoutError
|
138
|
-
raise
|
139
|
-
rescue Docker::Error::DockerError
|
140
|
-
raise Docker::Error::VersionError, "Expected API Version: #{API_VERSION}"
|
141
|
-
end
|
142
|
-
|
143
132
|
module_function :default_socket_url, :env_url, :url, :url=, :env_options,
|
144
133
|
:options, :options=, :creds, :creds=, :logger, :logger=,
|
145
134
|
:connection, :reset!, :reset_connection!, :version, :info,
|
146
|
-
:ping, :authenticate!, :
|
135
|
+
:ping, :authenticate!, :ssl_options
|
147
136
|
end
|
data/lib/docker/connection.rb
CHANGED
@@ -80,7 +80,7 @@ private
|
|
80
80
|
user_agent = "Swipely/Docker-API #{Docker::VERSION}"
|
81
81
|
{
|
82
82
|
:method => http_method,
|
83
|
-
:path =>
|
83
|
+
:path => path,
|
84
84
|
:query => query,
|
85
85
|
:headers => { 'Content-Type' => content_type,
|
86
86
|
'User-Agent' => user_agent,
|
data/lib/docker/container.rb
CHANGED
@@ -135,10 +135,10 @@ class Docker::Container
|
|
135
135
|
# Based on the link, the config passed as run, needs to be passed as the
|
136
136
|
# body of the post so capture it, remove from the options, and pass it via
|
137
137
|
# the post body
|
138
|
-
config = options.delete('run')
|
139
|
-
hash = Docker::Util.parse_json(
|
140
|
-
|
141
|
-
|
138
|
+
config = MultiJson.dump(options.delete('run'))
|
139
|
+
hash = Docker::Util.parse_json(
|
140
|
+
connection.post('/commit', options, body: config)
|
141
|
+
)
|
142
142
|
Docker::Image.send(:new, self.connection, hash)
|
143
143
|
end
|
144
144
|
|
@@ -185,21 +185,21 @@ class Docker::Container
|
|
185
185
|
end
|
186
186
|
|
187
187
|
def update(opts)
|
188
|
-
connection.post(path_for(:update), {}, body: opts
|
188
|
+
connection.post(path_for(:update), {}, body: MultiJson.dump(opts))
|
189
189
|
end
|
190
190
|
|
191
191
|
def streaming_logs(opts = {}, &block)
|
192
|
-
stack_size = opts.delete('stack_size') || -1
|
192
|
+
stack_size = opts.delete('stack_size') || opts.delete(:stack_size) || -1
|
193
193
|
tty = opts.delete('tty') || opts.delete(:tty) || false
|
194
194
|
msgs = Docker::MessagesStack.new(stack_size)
|
195
|
-
excon_params = {response_block: Docker::Util.attach_for(block, msgs, tty)}
|
195
|
+
excon_params = {response_block: Docker::Util.attach_for(block, msgs, tty), idempotent: false}
|
196
196
|
|
197
197
|
connection.get(path_for(:logs), opts, excon_params)
|
198
198
|
msgs.messages.join
|
199
199
|
end
|
200
200
|
|
201
201
|
def start!(opts = {})
|
202
|
-
connection.post(path_for(:start), {}, :
|
202
|
+
connection.post(path_for(:start), {}, body: MultiJson.dump(opts))
|
203
203
|
self
|
204
204
|
end
|
205
205
|
|
@@ -225,7 +225,7 @@ class Docker::Container
|
|
225
225
|
timeout = opts.delete('timeout')
|
226
226
|
query = {}
|
227
227
|
request_options = {
|
228
|
-
:body => opts
|
228
|
+
:body => MultiJson.dump(opts)
|
229
229
|
}
|
230
230
|
if timeout
|
231
231
|
query['t'] = timeout
|
@@ -266,14 +266,6 @@ class Docker::Container
|
|
266
266
|
end
|
267
267
|
end
|
268
268
|
|
269
|
-
def copy(path, &block)
|
270
|
-
connection.post(path_for(:copy), {},
|
271
|
-
:body => { "Resource" => path }.to_json,
|
272
|
-
:response_block => block
|
273
|
-
)
|
274
|
-
self
|
275
|
-
end
|
276
|
-
|
277
269
|
def archive_out(path, &block)
|
278
270
|
connection.get(
|
279
271
|
path_for(:archive),
|
@@ -332,17 +324,16 @@ class Docker::Container
|
|
332
324
|
|
333
325
|
# Create a new Container.
|
334
326
|
def self.create(opts = {}, conn = Docker.connection)
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
resp = conn.post('/containers/create', query, :body => opts.to_json)
|
327
|
+
query = opts.select {|key| ['name', :name].include?(key) }
|
328
|
+
clean_opts = opts.reject {|key| ['name', :name].include?(key) }
|
329
|
+
resp = conn.post('/containers/create', query, :body => MultiJson.dump(clean_opts))
|
339
330
|
hash = Docker::Util.parse_json(resp) || {}
|
340
331
|
new(conn, hash)
|
341
332
|
end
|
342
333
|
|
343
334
|
# Return the container with specified ID
|
344
335
|
def self.get(id, opts = {}, conn = Docker.connection)
|
345
|
-
container_json = conn.get("/containers/#{
|
336
|
+
container_json = conn.get("/containers/#{id}/json", opts)
|
346
337
|
hash = Docker::Util.parse_json(container_json) || {}
|
347
338
|
new(conn, hash)
|
348
339
|
end
|
@@ -353,6 +344,12 @@ class Docker::Container
|
|
353
344
|
hashes.map { |hash| new(conn, hash) }
|
354
345
|
end
|
355
346
|
|
347
|
+
# Prune images
|
348
|
+
def self.prune(conn = Docker.connection)
|
349
|
+
conn.post("/containers/prune", {})
|
350
|
+
nil
|
351
|
+
end
|
352
|
+
|
356
353
|
# Convenience method to return the path for a particular resource.
|
357
354
|
def path_for(resource)
|
358
355
|
"/containers/#{self.id}/#{resource}"
|
data/lib/docker/event.rb
CHANGED
@@ -29,7 +29,9 @@ class Docker::Event
|
|
29
29
|
|
30
30
|
def stream(opts = {}, conn = Docker.connection, &block)
|
31
31
|
conn.get('/events', opts, :response_block => lambda { |b, r, t|
|
32
|
-
|
32
|
+
b.each_line do |line|
|
33
|
+
block.call(new_event(line, r, t))
|
34
|
+
end
|
33
35
|
})
|
34
36
|
end
|
35
37
|
|
data/lib/docker/exec.rb
CHANGED
@@ -20,7 +20,7 @@ class Docker::Exec
|
|
20
20
|
def self.create(options = {}, conn = Docker.connection)
|
21
21
|
container = options.delete('Container')
|
22
22
|
resp = conn.post("/containers/#{container}/exec", {},
|
23
|
-
:
|
23
|
+
body: MultiJson.dump(options))
|
24
24
|
hash = Docker::Util.parse_json(resp) || {}
|
25
25
|
new(conn, hash)
|
26
26
|
end
|
@@ -51,11 +51,11 @@ class Docker::Exec
|
|
51
51
|
read_timeout = options[:wait]
|
52
52
|
|
53
53
|
# Create API Request Body
|
54
|
-
body =
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
excon_params = { :
|
54
|
+
body = MultiJson.dump(
|
55
|
+
'Tty' => tty,
|
56
|
+
'Detach' => detached
|
57
|
+
)
|
58
|
+
excon_params = { body: body }
|
59
59
|
|
60
60
|
msgs = Docker::Messages.new
|
61
61
|
unless detached
|
data/lib/docker/image.rb
CHANGED
@@ -108,7 +108,7 @@ class Docker::Image
|
|
108
108
|
|
109
109
|
# Create a new Image.
|
110
110
|
def create(opts = {}, creds = nil, conn = Docker.connection, &block)
|
111
|
-
credentials = creds.nil? ? Docker.creds : creds
|
111
|
+
credentials = creds.nil? ? Docker.creds : MultiJson.dump(creds)
|
112
112
|
headers = credentials && Docker::Util.build_auth_header(credentials) || {}
|
113
113
|
body = ''
|
114
114
|
conn.post(
|
@@ -126,7 +126,7 @@ class Docker::Image
|
|
126
126
|
|
127
127
|
# Return a specific image.
|
128
128
|
def get(id, opts = {}, conn = Docker.connection)
|
129
|
-
image_json = conn.get("/images/#{
|
129
|
+
image_json = conn.get("/images/#{id}/json", opts)
|
130
130
|
hash = Docker::Util.parse_json(image_json) || {}
|
131
131
|
new(conn, hash)
|
132
132
|
end
|
@@ -137,6 +137,12 @@ class Docker::Image
|
|
137
137
|
end
|
138
138
|
alias_method :delete, :remove
|
139
139
|
|
140
|
+
# Prune images
|
141
|
+
def prune(conn = Docker.connection)
|
142
|
+
conn.post("/images/prune", {})
|
143
|
+
end
|
144
|
+
|
145
|
+
|
140
146
|
# Save the raw binary representation or one or more Docker images
|
141
147
|
#
|
142
148
|
# @param names [String, Array#String] The image(s) you wish to save
|
@@ -168,7 +174,7 @@ class Docker::Image
|
|
168
174
|
# By using compare_by_identity we can create a Hash that has
|
169
175
|
# the same key multiple times.
|
170
176
|
query = {}.tap(&:compare_by_identity)
|
171
|
-
Array(names).each { |name| query['names'.dup] =
|
177
|
+
Array(names).each { |name| query['names'.dup] = name }
|
172
178
|
conn.get(
|
173
179
|
'/images/get',
|
174
180
|
query,
|
@@ -206,8 +212,14 @@ class Docker::Image
|
|
206
212
|
|
207
213
|
# Given a query like `{ :term => 'sshd' }`, queries the Docker Registry for
|
208
214
|
# a corresponding Image.
|
209
|
-
def search(query = {}, connection = Docker.connection)
|
210
|
-
|
215
|
+
def search(query = {}, connection = Docker.connection, creds = nil)
|
216
|
+
credentials = creds.nil? ? Docker.creds : creds.to_json
|
217
|
+
headers = credentials && Docker::Util.build_auth_header(credentials) || {}
|
218
|
+
body = connection.get(
|
219
|
+
'/images/search',
|
220
|
+
query,
|
221
|
+
:headers => headers,
|
222
|
+
)
|
211
223
|
hashes = Docker::Util.parse_json(body) || []
|
212
224
|
hashes.map { |hash| new(connection, 'id' => hash['name']) }
|
213
225
|
end
|
data/lib/docker/network.rb
CHANGED
@@ -3,17 +3,17 @@ class Docker::Network
|
|
3
3
|
include Docker::Base
|
4
4
|
|
5
5
|
def connect(container, opts = {}, body_opts = {})
|
6
|
+
body = MultiJson.dump({ container: container }.merge(body_opts))
|
6
7
|
Docker::Util.parse_json(
|
7
|
-
connection.post(path_for('connect'), opts,
|
8
|
-
body: { container: container }.merge(body_opts).to_json)
|
8
|
+
connection.post(path_for('connect'), opts, body: body)
|
9
9
|
)
|
10
10
|
reload
|
11
11
|
end
|
12
12
|
|
13
13
|
def disconnect(container, opts = {})
|
14
|
+
body = MultiJson.dump(container: container)
|
14
15
|
Docker::Util.parse_json(
|
15
|
-
connection.post(path_for('disconnect'), opts,
|
16
|
-
body: { container: container }.to_json)
|
16
|
+
connection.post(path_for('disconnect'), opts, body: body)
|
17
17
|
)
|
18
18
|
reload
|
19
19
|
end
|
@@ -34,25 +34,24 @@ class Docker::Network
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def reload
|
37
|
-
network_json = @connection.get("/networks/#{
|
37
|
+
network_json = @connection.get("/networks/#{@id}")
|
38
38
|
hash = Docker::Util.parse_json(network_json) || {}
|
39
39
|
@info = hash
|
40
40
|
end
|
41
41
|
|
42
42
|
class << self
|
43
43
|
def create(name, opts = {}, conn = Docker.connection)
|
44
|
-
default_opts = {
|
44
|
+
default_opts = MultiJson.dump({
|
45
45
|
'Name' => name,
|
46
46
|
'CheckDuplicate' => true
|
47
|
-
}
|
48
|
-
resp = conn.post('/networks/create', {},
|
49
|
-
body: default_opts.merge(opts).to_json)
|
47
|
+
}.merge(opts))
|
48
|
+
resp = conn.post('/networks/create', {}, body: default_opts)
|
50
49
|
response_hash = Docker::Util.parse_json(resp) || {}
|
51
50
|
get(response_hash['Id'], {}, conn) || {}
|
52
51
|
end
|
53
52
|
|
54
53
|
def get(id, opts = {}, conn = Docker.connection)
|
55
|
-
network_json = conn.get("/networks/#{
|
54
|
+
network_json = conn.get("/networks/#{id}", opts)
|
56
55
|
hash = Docker::Util.parse_json(network_json) || {}
|
57
56
|
new(conn, hash)
|
58
57
|
end
|
@@ -63,10 +62,15 @@ class Docker::Network
|
|
63
62
|
end
|
64
63
|
|
65
64
|
def remove(id, opts = {}, conn = Docker.connection)
|
66
|
-
conn.delete("/networks/#{
|
65
|
+
conn.delete("/networks/#{id}", opts)
|
67
66
|
nil
|
68
67
|
end
|
69
68
|
alias_method :delete, :remove
|
69
|
+
|
70
|
+
def prune(conn = Docker.connection)
|
71
|
+
conn.post("/networks/prune", {})
|
72
|
+
nil
|
73
|
+
end
|
70
74
|
end
|
71
75
|
|
72
76
|
# Convenience method to return the path for a particular resource.
|
data/lib/docker/util.rb
CHANGED
@@ -102,8 +102,8 @@ module Docker::Util
|
|
102
102
|
end
|
103
103
|
|
104
104
|
def parse_json(body)
|
105
|
-
|
106
|
-
rescue
|
105
|
+
MultiJson.load(body) unless body.nil? || body.empty? || (body == 'null')
|
106
|
+
rescue MultiJson::ParseError => ex
|
107
107
|
raise UnexpectedResponseError, ex.message
|
108
108
|
end
|
109
109
|
|
@@ -232,7 +232,7 @@ module Docker::Util
|
|
232
232
|
end
|
233
233
|
|
234
234
|
def build_auth_header(credentials)
|
235
|
-
credentials = credentials
|
235
|
+
credentials = MultiJson.dump(credentials) if credentials.is_a?(Hash)
|
236
236
|
encoded_creds = Base64.urlsafe_encode64(credentials)
|
237
237
|
{
|
238
238
|
'X-Registry-Auth' => encoded_creds
|
@@ -241,15 +241,16 @@ module Docker::Util
|
|
241
241
|
|
242
242
|
def build_config_header(credentials)
|
243
243
|
if credentials.is_a?(String)
|
244
|
-
credentials =
|
244
|
+
credentials = MultiJson.load(credentials, symbolize_keys: true)
|
245
245
|
end
|
246
|
-
|
246
|
+
|
247
|
+
header = MultiJson.dump(
|
247
248
|
credentials[:serveraddress].to_s => {
|
248
|
-
|
249
|
-
|
250
|
-
|
249
|
+
'username' => credentials[:username].to_s,
|
250
|
+
'password' => credentials[:password].to_s,
|
251
|
+
'email' => credentials[:email].to_s
|
251
252
|
}
|
252
|
-
|
253
|
+
)
|
253
254
|
|
254
255
|
encoded_header = Base64.urlsafe_encode64(header)
|
255
256
|
|
data/lib/docker/version.rb
CHANGED
data/lib/docker/volume.rb
CHANGED
@@ -31,9 +31,14 @@ class Docker::Volume
|
|
31
31
|
# creates a volume with an arbitrary name
|
32
32
|
def create(name, opts = {}, conn = Docker.connection)
|
33
33
|
opts['Name'] = name
|
34
|
-
resp = conn.post('/volumes/create', {}, :
|
34
|
+
resp = conn.post('/volumes/create', {}, body: MultiJson.dump(opts))
|
35
35
|
hash = Docker::Util.parse_json(resp) || {}
|
36
36
|
new(conn, hash)
|
37
37
|
end
|
38
|
+
|
39
|
+
def prune(conn = Docker.connection)
|
40
|
+
conn.post("/volumes/prune")
|
41
|
+
end
|
42
|
+
|
38
43
|
end
|
39
44
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: docker-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0.pre.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Swipely, Inc.
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-07-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: excon
|
@@ -16,16 +16,16 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 0.47.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.
|
26
|
+
version: 0.47.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: multi_json
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
@@ -179,7 +179,7 @@ homepage: https://github.com/swipely/docker-api
|
|
179
179
|
licenses:
|
180
180
|
- MIT
|
181
181
|
metadata: {}
|
182
|
-
post_install_message:
|
182
|
+
post_install_message:
|
183
183
|
rdoc_options: []
|
184
184
|
require_paths:
|
185
185
|
- lib
|
@@ -190,14 +190,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
190
190
|
version: '0'
|
191
191
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
192
192
|
requirements:
|
193
|
-
- - "
|
193
|
+
- - ">"
|
194
194
|
- !ruby/object:Gem::Version
|
195
|
-
version:
|
195
|
+
version: 1.3.1
|
196
196
|
requirements: []
|
197
|
-
|
198
|
-
|
199
|
-
signing_key:
|
197
|
+
rubygems_version: 3.1.2
|
198
|
+
signing_key:
|
200
199
|
specification_version: 4
|
201
200
|
summary: A simple REST client for the Docker Remote API
|
202
201
|
test_files: []
|
203
|
-
has_rdoc:
|