docker-api 1.16.0 → 1.16.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d13e05e91b0dbfbae522e12e17e7a6785347f5b7
4
- data.tar.gz: 83e0f7511f3e284747d4cabbbb3a69cf701ed5d4
3
+ metadata.gz: f5107a18fb800b02e24fb210eabebb590ebba712
4
+ data.tar.gz: d6e84d31fcb6a92122534f6abbef33ada1e067db
5
5
  SHA512:
6
- metadata.gz: a8f18cbb168d6808180a9adac203a94b37bf82d9bbb43bf9fe9c63fd9dba4b7baab4756cee3a3d9eb30e9cbf0c9a178d6d8506faca9d32656620f162bb5f6571
7
- data.tar.gz: dd860931831eceadb0bae490710edbc6f52189c918999b0edb41b2d3c88961a53359bf597eee953869745730279e8d68ec6fa146a3eca06f1395e8e58d26ccda
6
+ metadata.gz: be210857e2617dfd0afdda61d56cca2ccb175444c3795713ebe5bb2d4af66fc594775c7362485ccac32b0ebb6eceaf3ac79b2d14b97d0c41905d8b1488984dd9
7
+ data.tar.gz: 710e11510744cd6066519baa481887bccf38ec45138aa4e989f9f66fab42bc74c08921517864706d644ea7cca2f65e29eccc8e99cf94839f7daf911fc3c8ff0e
data/README.md CHANGED
@@ -95,6 +95,7 @@ Docker.authenticate!('username' => 'docker-fan-boi', 'password' => 'i<3docker',
95
95
  ```
96
96
 
97
97
  ## Images
98
+
98
99
  Just about every method here has a one-to-one mapping with the [Images](https://docs.docker.com/reference/api/docker_remote_api_v1.12/#22-images) section of the API. If an API call accepts query parameters, these can be passed as an Hash to it's corresponding method. Also, note that `Docker::Image.new` is a private method, so you must use `.create`, `.build`, `.build_from_dir`, `build_from_tar`, or `.import` to make an instance.
99
100
 
100
101
  ```ruby
@@ -102,7 +103,7 @@ require 'docker'
102
103
  # => true
103
104
 
104
105
  # Create an Image.
105
- Docker::Image.create('fromImage' => 'base')
106
+ image = Docker::Image.create('fromImage' => 'base')
106
107
  # => Docker::Image { :id => ae7ffbcd1, :connection => Docker::Connection { :url => tcp://localhost, :options => {:port=>2375} } }
107
108
 
108
109
  # Insert a local file into an Image.
@@ -182,13 +183,14 @@ Docker::Image.search('term' => 'sshd')
182
183
  ```
183
184
 
184
185
  ## Containers
186
+
185
187
  Much like the Images, this object also has a one-to-one mapping with the [Containers](https://docs.docker.com/reference/api/docker_remote_api_v1.12/#21-containers) section of the API. Also like Images, `.new` is a private method, so you must use `.create` to make an instance.
186
188
 
187
189
  ```ruby
188
190
  require 'docker'
189
191
 
190
192
  # Create a Container.
191
- Docker::Container.create('Cmd' => ['ls'], 'Image' => 'base')
193
+ container = Docker::Container.create('Cmd' => ['ls'], 'Image' => 'base')
192
194
  # => Docker::Container { :id => 492510dd38e4, :connection => Docker::Connection { :url => tcp://localhost, :options => {:port=>2375} } }
193
195
 
194
196
  # Get more information about the Container.
@@ -271,6 +273,33 @@ container = Docker::Container.create('Image' => 'base', 'Cmd' => ['cat'], 'OpenS
271
273
  container.tap(&:start).attach(stdin: StringIO.new("foo\nbar\n"))
272
274
  # => [["foo\nbar\n"], []]
273
275
 
276
+ # Similar to the stdout/stderr attach method, there is logs and streaming_logs
277
+
278
+ # logs will only return after the container has exited. The output will be the raw output from the logs stream.
279
+ # streaming_logs will collect the messages out of the multiplexed form and also execute a block on each line that comes in (block takes a stream and a chunk as arguments)
280
+
281
+ # Raw logs from a TTY-enabled container after exit
282
+ container.logs(stdout: true)
283
+ # => "\e]0;root@8866c76564e8: /\aroot@8866c76564e8:/# echo 'i\b \bdocker-api'\r\ndocker-api\r\n\e]0;root@8866c76564e8: /\aroot@8866c76564e8:/# exit\r\n"
284
+
285
+ # Logs from a non-TTY container with multiplex prefix
286
+ container.logs(stdout: true)
287
+ # => "\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00021\n\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00022\n\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00023\n\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00024\n\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00025\n\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00026\n\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00027\n\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00028\n\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00029\n\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u000310\n"
288
+
289
+ # Streaming logs from non-TTY container removing multiplex prefix with a block printing out each line (block not possible with Container#logs)
290
+ container.streaming_logs(stdout: true) { |stream, chunk| puts "#{stream}: #{chunk}" }
291
+ stdout: 1
292
+ stdout: 2
293
+ stdout: 3
294
+ stdout: 4
295
+ stdout: 5
296
+ stdout: 6
297
+ stdout: 7
298
+ stdout: 8
299
+ stdout: 9
300
+ stdout: 10
301
+ # => "1\n\n2\n\n3\n\n4\n\n5\n\n6\n\n7\n\n8\n\n9\n\n10\n"
302
+
274
303
  # If the container has TTY enabled, set `tty => true` to get the raw stream:
275
304
  command = ["bash", "-c", "if [ -t 1 ]; then echo -n \"I'm a TTY!\"; fi"]
276
305
  container = Docker::Container.create('Image' => 'ubuntu', 'Cmd' => command, 'Tty' => true)
@@ -325,6 +354,25 @@ Docker::Container.all(:all => true)
325
354
  # => [Docker::Container { :id => , :connection => Docker::Connection { :url => tcp://localhost, :options => {:port=>2375} } }]
326
355
  ```
327
356
 
357
+ ## Events
358
+
359
+ ```ruby
360
+ require 'docker'
361
+
362
+ # Action on a stream of events as they come in
363
+ Docker::Event.stream { |event| puts event; break }
364
+ Docker::Event { :status => create, :id => aeb8b55726df63bdd69d41e1b2650131d7ce32ca0d2fa5cbc75f24d0df34c7b0, :from => base:latest, :time => 1416958554 }
365
+ # => nil
366
+
367
+ # Action on all events after a given time (will execute the block for all events up till the current time, and wait to execute on any new events after)
368
+ Docker::Event.since(1416958763) { |event| puts event; puts Time.now.to_i; break }
369
+ Docker::Event { :status => die, :id => 663005cdeb56f50177c395a817dbc8bdcfbdfbdaef329043b409ecb97fb68d7e, :from => base:latest, :time => 1416958764 }
370
+ 1416959041
371
+ # => nil
372
+ ```
373
+
374
+ These methods are prone to read timeouts. `Docker.options[:read_timeout]` will need to be made higher than 60 seconds if expecting a long time between events.
375
+
328
376
  ## Connecting to Multiple Servers
329
377
 
330
378
  By default, each object connects to the connection specified by `Docker.connection`. If you need to connect to multiple servers, you can do so by specifying the connection on `#new` or in the utilizing class method. For example:
data/lib/docker/image.rb CHANGED
@@ -100,8 +100,9 @@ class Docker::Image
100
100
  headers = !credentials.nil? && Docker::Util.build_auth_header(credentials)
101
101
  headers ||= {}
102
102
  body = conn.post('/images/create', opts, :headers => headers)
103
- id = Docker::Util.fix_json(body).select { |m| m['id'] }.last['id']
104
- new(conn, 'id' => id, :headers => headers)
103
+ json = Docker::Util.fix_json(body)
104
+ image = json.reverse_each.find { |el| el && el.key?('id') }
105
+ new(conn, 'id' => image && image.fetch('id'), :headers => headers)
105
106
  end
106
107
 
107
108
  # Return a specific image.
@@ -1,6 +1,6 @@
1
1
  module Docker
2
2
  # The version of the docker-api gem.
3
- VERSION = '1.16.0'
3
+ VERSION = '1.16.1'
4
4
 
5
5
  # The version of the compatible Docker remote API.
6
6
  API_VERSION = '1.15'
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: 1.16.0
4
+ version: 1.16.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Swipely, Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-02 00:00:00.000000000 Z
11
+ date: 2014-12-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: excon