Object
This class represents a Docker Container. It's important to note that nothing is cached so that the information is always up to date.
Return all of the Containers.
# File lib/docker/container.rb, line 233 def self.all(opts = {}, conn = Docker.connection) hashes = Docker::Util.parse_json(conn.get('/containers/json', opts)) || [] hashes.map { |hash| new(conn, hash) } end
Create a new Container.
# File lib/docker/container.rb, line 216 def self.create(opts = {}, conn = Docker.connection) name = opts.delete('name') query = {} query['name'] = name if name resp = conn.post('/containers/create', query, :body => opts.to_json) hash = Docker::Util.parse_json(resp) || {} new(conn, hash) end
Return the container with specified ID
# File lib/docker/container.rb, line 226 def self.get(id, opts = {}, conn = Docker.connection) container_json = conn.get("/containers/#{URI.encode(id)}/json", opts) hash = Docker::Util.parse_json(container_json) || {} new(conn, hash) end
Attach to a container's standard streams / logs.
# File lib/docker/container.rb, line 80 def attach(options = {}, &block) stdin = options.delete(:stdin) tty = options.delete(:tty) opts = { :stream => true, :stdout => true, :stderr => true }.merge(options) # Creates list to store stdout and stderr messages msgs = Docker::Messages.new excon_params = {} if stdin # If attaching to stdin, we must hijack the underlying TCP connection # so we can stream stdin to the remote Docker process opts[:stdin] = true excon_params[:hijack_block] = Docker::Util.hijack_for(stdin, block, msgs, tty) else excon_params[:response_block] = Docker::Util.attach_for(block, msgs, tty) end connection.post( path_for(:attach), opts, excon_params ) [msgs.stdout_messages, msgs.stderr_messages] end
Create an Image from a Container's change.s
# File lib/docker/container.rb, line 111 def commit(options = {}) options.merge!('container' => self.id[0..7]) # [code](https://github.com/dotcloud/docker/blob/v0.6.3/commands.go#L1115) # Based on the link, the config passed as run, needs to be passed as the # body of the post so capture it, remove from the options, and pass it via # the post body config = options.delete('run') hash = Docker::Util.parse_json(connection.post('/commit', options, :body => config.to_json)) Docker::Image.send(:new, self.connection, hash) end
# File lib/docker/container.rb, line 207 def copy(path, &block) connection.post(path_for(:copy), {}, :body => { "Resource" => path }.to_json, :response_block => block ) self end
Create an Exec instance inside the container
@param command [String, Array] The command to run inside the Exec instance @param options [Hash] The options to pass to Docker::Exec
@return [Docker::Exec] The Exec instance
# File lib/docker/container.rb, line 41 def exec(command, opts = {}, &block) # Establish values tty = opts.delete(:tty) || false detach = opts.delete(:detach) || false stdin = opts.delete(:stdin) stdout = opts.delete(:stdout) || !detach stderr = opts.delete(:stderr) || !detach # Create Exec Instance instance = Docker::Exec.create( 'Container' => self.id, 'AttachStdin' => !!stdin, 'AttachStdout' => stdout, 'AttachStderr' => stderr, 'Tty' => tty, 'Cmd' => command ) start_opts = { :tty => tty, :stdin => stdin, :detach => detach } if detach instance.start!(start_opts) return instance else instance.start!(start_opts, &block) end end
Export the Container as a tar.
# File lib/docker/container.rb, line 74 def export(&block) connection.get(path_for(:export), {}, :response_block => block) self end
# File lib/docker/container.rb, line 154 def kill!(opts = {}) connection.post(path_for(:kill), opts) self end
# File lib/docker/container.rb, line 137 def logs(opts = {}) connection.get(path_for(:logs), opts) end
remove container
# File lib/docker/container.rb, line 186 def remove(options = {}) connection.delete("/containers/#{self.id}", options) nil end
Given a command and an optional number of seconds to wait for the currently executing command, creates a new Container to run the specified command. If the command that is currently executing does not return a 0 status code, an UnexpectedResponseError is raised.
# File lib/docker/container.rb, line 27 def run(cmd, time = 1000) if (code = tap(&:start).wait(time)['StatusCode']).zero? commit.run(cmd) else raise UnexpectedResponseError, "Command returned status code #{code}." end end
# File lib/docker/container.rb, line 149 def start!(opts = {}) connection.post(path_for(:start), {}, :body => opts.to_json) self end
# File lib/docker/container.rb, line 141 def streaming_logs(opts = {}, &block) msgs = Docker::Messages.new excon_params = {response_block: Docker::Util.attach_for(block, msgs, false)} connection.get(path_for(:logs), opts, excon_params) msgs.all_messages.join end
Return a String representation of the Container.
# File lib/docker/container.rb, line 125 def to_s "Docker::Container { :id => #{self.id}, :connection => #{self.connection} }" end
Return a List of Hashes that represents the top running processes.
# File lib/docker/container.rb, line 7 def top(opts = {}) resp = Docker::Util.parse_json(connection.get(path_for(:top), opts)) if resp['Processes'].nil? [] else resp['Processes'].map { |ary| Hash[resp['Titles'].zip(ary)] } end end
Wait for the current command to finish executing. Default wait time is `Excon.options`.
# File lib/docker/container.rb, line 18 def wait(time = nil) resp = connection.post(path_for(:wait), nil, :read_timeout => time) Docker::Util.parse_json(resp) end
Generated with the Darkfish Rdoc Generator 2.