lib/minke/docker/docker_runner.rb in minke-1.13.20 vs lib/minke/docker/docker_runner.rb in minke-1.14.0
- old
+ new
@@ -74,11 +74,11 @@
'Cmd' => args[:command],
"Binds" => args[:volumes],
"Env" => args[:environment],
'WorkingDir' => args[:working_directory],
'NetworkMode' => @network,
- 'name' => args[:name],
+ 'name' => args[:name],
'PublishAllPorts' => true
)
output = ''
@@ -95,17 +95,51 @@
end
end
end
end
-
-
container.start
-
thread.join unless args[:deamon] == true
success = (container.json['State']['ExitCode'] == 0) ? true: false
-
+ @logger.error(output) unless success
+
+ return container, success
+ end
+
+ #
+ # create_and_run_blocking_container starts a conatainer of the given image name and executes a command, this method blocks until the container exits
+ #
+ # Returns:
+ # - Docker::Container
+ # - sucess (true if command succeded without error)
+ def create_and_run_blocking_container args
+ # update the timeout for the Excon Http Client
+ # set the chunk size to enable streaming of log files
+ ::Docker.options = {:chunk_size => 1, :read_timeout => 3600}
+ container = ::Docker::Container.create(
+ 'Image' => args[:image],
+ 'Cmd' => args[:command],
+ "Binds" => args[:volumes],
+ "Env" => args[:environment],
+ 'WorkingDir' => args[:working_directory],
+ 'name' => args[:name],
+ 'NetworkMode' => @network,
+ "OpenStdin" => true,
+ "StdinOnce" => true,
+ "Tty" => true,
+ 'PublishAllPorts' => true
+ )
+
+ container.start
+
+ STDIN.raw do |stdin|
+ container.attach(stdin: stdin, tty: true) do |chunk|
+ print chunk
+ end
+ end
+
+ success = (container.json['State']['ExitCode'] == 0) ? true: false
@logger.error(output) unless success
return container, success
end