{"id":635,"name":null,"description":"A lightweight Ruby client for the Docker Remote API","url":"https://github.com/upserve/docker-api","last_synced_at":"2026-04-30T04:02:26.642Z","repository":{"id":40477812,"uuid":"10674058","full_name":"upserve/docker-api","owner":"upserve","description":"A lightweight Ruby client for the Docker Remote API","archived":false,"fork":false,"pushed_at":"2025-04-01T20:44:05.000Z","size":16603,"stargazers_count":1123,"open_issues_count":55,"forks_count":288,"subscribers_count":56,"default_branch":"master","last_synced_at":"2026-04-23T03:07:13.574Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/upserve.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2013-06-13T19:29:58.000Z","updated_at":"2026-04-12T02:10:15.000Z","dependencies_parsed_at":"2024-12-30T20:41:16.214Z","dependency_job_id":"e7b1f280-21c4-411e-b999-f339ed6de83f","html_url":"https://github.com/upserve/docker-api","commit_stats":{"total_commits":700,"total_committers":106,"mean_commits":6.60377358490566,"dds":0.6771428571428572,"last_synced_commit":"91401debd83de0f3f5be24487b9c9da8e5b955ab"},"previous_names":["swipely/docker-api"],"tags_count":79,"template":false,"template_full_name":null,"purl":"pkg:github/upserve/docker-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/upserve%2Fdocker-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/upserve%2Fdocker-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/upserve%2Fdocker-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/upserve%2Fdocker-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/upserve","download_url":"https://codeload.github.com/upserve/docker-api/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/upserve%2Fdocker-api/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32352406,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-27T17:12:42.749Z","status":"ssl_error","status_checked_at":"2026-04-27T17:12:41.658Z","response_time":128,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"owner":{"login":"upserve","name":"Upserve","uuid":"19398657","kind":"organization","description":"","email":null,"website":"https://upserve.com","location":null,"twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/19398657?v=4","repositories_count":14,"last_synced_at":"2024-04-14T08:10:08.458Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/upserve","funding_links":[],"total_stars":1353,"followers":8,"following":0,"created_at":"2022-11-06T10:49:53.188Z","updated_at":"2024-04-14T08:10:11.225Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/upserve","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/upserve/repositories"},"packages":[{"id":8616221,"name":"github.com/upserve/docker-api","ecosystem":"go","description":null,"homepage":null,"licenses":"mit","normalized_licenses":["MIT"],"repository_url":"https://github.com/upserve/docker-api","keywords_array":[],"namespace":null,"versions_count":72,"first_release_published_at":"2023-12-03T01:59:01.635Z","latest_release_published_at":"2024-10-30T18:39:20.000Z","latest_release_number":"v2.4.0+incompatible","last_synced_at":"2026-03-31T14:01:10.208Z","created_at":"2023-12-03T01:58:55.523Z","updated_at":"2026-03-31T14:01:10.208Z","registry_url":"https://pkg.go.dev/github.com/upserve/docker-api","install_command":"go get github.com/upserve/docker-api","documentation_url":"https://pkg.go.dev/github.com/upserve/docker-api#section-documentation","metadata":{},"repo_metadata":{"id":40477812,"uuid":"10674058","full_name":"upserve/docker-api","owner":"upserve","description":"A lightweight Ruby client for the Docker Remote API","archived":false,"fork":false,"pushed_at":"2025-04-01T20:44:05.000Z","size":16603,"stargazers_count":1118,"open_issues_count":53,"forks_count":291,"subscribers_count":56,"default_branch":"master","last_synced_at":"2025-11-12T18:01:17.001Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/upserve.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2013-06-13T19:29:58.000Z","updated_at":"2025-11-09T09:44:05.000Z","dependencies_parsed_at":"2024-12-30T20:41:16.214Z","dependency_job_id":"e7b1f280-21c4-411e-b999-f339ed6de83f","html_url":"https://github.com/upserve/docker-api","commit_stats":{"total_commits":700,"total_committers":106,"mean_commits":6.60377358490566,"dds":0.6771428571428572,"last_synced_commit":"91401debd83de0f3f5be24487b9c9da8e5b955ab"},"previous_names":["swipely/docker-api"],"tags_count":79,"template":false,"template_full_name":null,"purl":"pkg:github/upserve/docker-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/upserve%2Fdocker-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/upserve%2Fdocker-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/upserve%2Fdocker-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/upserve%2Fdocker-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/upserve","download_url":"https://codeload.github.com/upserve/docker-api/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/upserve%2Fdocker-api/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":284082416,"owners_count":26944298,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-11-12T02:00:06.336Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"},"owner_record":{"login":"upserve","name":"Upserve","uuid":"19398657","kind":"organization","description":"","email":null,"website":"https://upserve.com","location":null,"twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/19398657?v=4","repositories_count":14,"last_synced_at":"2024-04-14T08:10:08.458Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/upserve","funding_links":[],"total_stars":1353,"followers":8,"following":0,"created_at":"2022-11-06T10:49:53.188Z","updated_at":"2024-04-14T08:10:11.225Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/upserve","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/upserve/repositories"},"tags":[]},"repo_metadata_updated_at":"2025-11-12T18:05:13.620Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":10.77902998550931,"dependent_packages_count":9.55954712080186,"stargazers_count":1.99853606907511,"forks_count":1.6661977147858025,"docker_downloads_count":null,"average":6.00082772254302},"purl":"pkg:golang/github.com/upserve/docker-api","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/go/github.com/upserve/docker-api","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/go/github.com/upserve/docker-api","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/go/github.com/upserve/docker-api/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":{"last_synced_at":"2025-10-24T21:39:54.253Z","issues_count":83,"pull_requests_count":40,"avg_time_to_close_issue":83936722.3442623,"avg_time_to_close_pull_request":17546987.592592593,"issues_closed_count":60,"pull_requests_closed_count":27,"pull_request_authors_count":26,"issue_authors_count":73,"avg_comments_per_issue":2.602409638554217,"avg_comments_per_pull_request":2.375,"merged_pull_requests_count":16,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":3,"past_year_pull_requests_count":14,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":274728.8333333333,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":6,"past_year_pull_request_authors_count":7,"past_year_issue_authors_count":1,"past_year_avg_comments_per_issue":0.0,"past_year_avg_comments_per_pull_request":2.0714285714285716,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":3,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/upserve%2Fdocker-api/issues","maintainers":[],"active_maintainers":[]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fupserve%2Fdocker-api/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fupserve%2Fdocker-api/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fupserve%2Fdocker-api/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fupserve%2Fdocker-api/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fupserve%2Fdocker-api/codemeta","maintainers":[],"registry":{"name":"proxy.golang.org","url":"https://proxy.golang.org","ecosystem":"go","default":true,"packages_count":2107169,"maintainers_count":0,"namespaces_count":782439,"keywords_count":112823,"github":"golang","metadata":{"funded_packages_count":53495},"icon_url":"https://github.com/golang.png","created_at":"2022-04-04T15:19:22.939Z","updated_at":"2026-04-19T05:14:45.920Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/namespaces"}}],"commits":{"id":3150,"full_name":"upserve/docker-api","default_branch":"master","total_commits":702,"total_committers":108,"total_bot_commits":0,"total_bot_committers":0,"mean_commits":6.5,"dds":0.6780626780626781,"past_year_total_commits":0,"past_year_total_committers":0,"past_year_total_bot_commits":0,"past_year_total_bot_committers":0,"past_year_mean_commits":0.0,"past_year_dds":0.0,"last_synced_at":"2026-04-27T20:12:07.167Z","last_synced_commit":"7e19faf75b886660afc43d21b1ad137642ee1d6f","created_at":"2023-03-07T09:16:43.729Z","updated_at":"2026-04-27T20:07:02.555Z","committers":[{"name":"Todd Lunter","email":"tlunter@gmail.com","login":"tlunter","count":226},{"name":"Tom Hulihan","email":"hulihan.tom159@gmail.com","login":"nahiluhmot","count":197},{"name":"Tom Duffield","email":"tom@opscode.com","login":null,"count":25},{"name":"Bright Fulton","email":"bright.fulton@gmail.com","login":"bfulton","count":11},{"name":"Todd Lunter","email":"todd.lunter@lightspeedhq.com","login":"ls-todd-lunter","count":9},{"name":"Michael Grosser","email":"michael@grosser.it","login":"grosser","count":9},{"name":"Donggeun","email":"doh@gracenote.com","login":null,"count":8},{"name":"vexus2","email":"rinrin900@gmail.com","login":"vexus2","count":8},{"name":"Simon Gate","email":"simon@smgt.me","login":"smgt","count":8},{"name":"Trevor Vaughan","email":"tvaughan@onyxpoint.com","login":"trevor-vaughan","count":7},{"name":"Ahmed Hazem","email":"ahazemm@gmail.com","login":"ahazem","count":6},{"name":"Hawk Newton","email":"hawk.newton@gmail.com","login":"hawknewton","count":6},{"name":"Mastahyeti","email":"mastahyeti","login":"mastahyeti","count":6},{"name":"Ulysse Carion","email":"ulyssecarion@gmail.com","login":"ucarion","count":6},{"name":"Albin Gilles","email":"gilles.albin@gmail.com","login":"AlbinOS","count":5},{"name":"Alex Parkinson","email":"okalex@gmail.com","login":"okalex","count":5},{"name":"Bill Wang","email":"ozbillwang@gmail.com","login":"ozbillwang","count":5},{"name":"Jari Kolehmainen","email":"jari.kolehmainen@gmail.com","login":"jakolehm","count":5},{"name":"Mattias Wadman","email":"mattias.wadman@gmail.com","login":"wader","count":5},{"name":"Tyler Hunt","email":"tyler@tylerhunt.com","login":"tylerhunt","count":4},{"name":"Lewis Marshall","email":"lewis@lmars.net","login":"lmars","count":4},{"name":"Ryan Walker","email":"ryan.walker@rackspace.com","login":null,"count":4},{"name":"Ian Katz","email":"ikatz@drizly.com","login":"ikatz-drizly","count":4},{"name":"Richard Lee","email":"dlackty@gmail.com","login":"dlackty","count":3},{"name":"Alberto Grespan","email":"albertogrespan@gmail.com","login":"albertogg","count":3},{"name":"Benjamin Quorning","email":"benjamin@quorning.net","login":"bquorning","count":3},{"name":"Jordon Bedwell","email":"jordon@envygeeks.io","login":"envygeeks","count":3},{"name":"Matthew O'Riordan","email":"matthew.oriordan@gmail.com","login":"mattheworiordan","count":3},{"name":"Max Schwenk","email":"maschwenk@gmail.com","login":"maschwenk","count":3},{"name":"Joseph McCormick and Stephen Prater","email":"dev+esmevane+stephenprater@acumenholdings.com","login":null,"count":3},{"name":"Randy D. Wallace Jr","email":"randy@edatasource.com","login":null,"count":3},{"name":"bakins","email":"brian.akins@turner.com","login":null,"count":3},{"name":"kaspernj","email":"k@spernj.org","login":"kaspernj","count":3},{"name":"John Maxwell","email":"jgwmaxwell@gmail.com","login":"jgwmaxwell","count":3},{"name":"Kim Daekwon","email":"propellerheaven@gmail.com","login":"nacyot","count":3},{"name":"Jon-Erik Schneiderhan","email":"jon-erik.schneiderhan@meyouhealth.com","login":"jschneiderhan","count":2},{"name":"Ben Dean","email":"ben.dean@ontariosystems.com","login":"b-dean","count":2},{"name":"Joshua Carp","email":"jm.carp@gmail.com","login":"jmcarp","count":2},{"name":"Michal Cichra","email":"mikz","login":"mikz","count":2},{"name":"Sean OMeara","email":"sean@sean.io","login":"someara","count":2},{"name":"Soulou","email":"leo@unbekandt.eu","login":"Soulou","count":2},{"name":"Thomas Orozco","email":"thomas@orozco.fr","login":"krallin","count":2},{"name":"Adam Ladachowski","email":"adam@saiden.pl","login":"aladac","count":2},{"name":"Abel Muiño","email":"amuino@gmail.com","login":"amuino","count":2},{"name":"Cristiano Balducci","email":"cb185188@ncr.com","login":null,"count":2},{"name":"Jonathan A. Sternberg","email":"jonathan.sternberg@knewton.com","login":null,"count":2},{"name":"Nicolas Rodriguez","email":"nrodriguez@jbox-web.com","login":null,"count":2},{"name":"Richard Pijnenburg","email":"richard@ispavailability.com","login":null,"count":2},{"name":"Sean OMeara","email":"sean@chef.io","login":null,"count":2},{"name":"Tim Smith","email":"tsmith@chef.io","login":"tas50","count":2},{"name":"Tom Duffield","email":"tom@chef.io","login":"tduffield","count":2},{"name":"Victor Costan","email":"costan@gmail.com","login":"pwnall","count":2},{"name":"dan","email":"daan.forever@gmail.com","login":"daanforever","count":2},{"name":"Taylor Yelverton","email":"taylor@ideamarshal.com","login":"yelvert","count":2},{"name":"Tom Lea","email":"commit@tomlea.co.uk","login":"tomlea","count":2},{"name":"Lyn Kotuby","email":"lynkotuby@upserve.com","login":null,"count":1},{"name":"Matteo Cerutti","email":"matteo.cerutti@rkrepsilon.com","login":null,"count":1},{"name":"Matteo Cerutti","email":"matteo.cerutti@swisscom.com","login":null,"count":1},{"name":"Moritz Heiber","email":"mheiber@thoughtworks.com","login":null,"count":1},{"name":"Nicolas Leger","email":"nicolas.leger@nleger.com","login":null,"count":1},{"name":"Zane Wolfgang Pickett","email":"Zane.Pickett@CVSCaremark.com","login":null,"count":1},{"name":"root","email":"root@homeserver","login":null,"count":1},{"name":"Thomas Buckley-Houston","email":"tom@tombh.co.uk","login":"tombh","count":1},{"name":"Theodore Vaida","email":"ted@xassembly.com","login":"y3ddet","count":1},{"name":"Shatil Rafiullah","email":"abd4arraafi+githubshatil@gmail.com","login":"shatil","count":1},{"name":"Ryan Schlesinger","email":"ryan@ryanschlesinger.com","login":"ryansch","count":1},{"name":"Rohit Amarnath","email":"rohit.amarnath@full360.com","login":"ramarnat","count":1},{"name":"Jonathan Chauncey","email":"jchauncey@rallydev.com","login":null,"count":1},{"name":"Fredrik Eckardt","email":"fredrik.eckardt@boardintelligence.co.uk","login":null,"count":1},{"name":"Chase Bolt","email":"cbolt@denirostaff.com","login":null,"count":1},{"name":"Tom Moor","email":"tom.moor@gmail.com","login":"tommoor","count":1},{"name":"Vito Sartori","email":"hey@vito.io","login":"heyvito","count":1},{"name":"Xabier de Zuazo","email":"xabier@zuazo.org","login":"zuazo","count":1},{"name":"bin liu","email":"liubin0329","login":"liubin0329","count":1},{"name":"cbalducci","email":"cristiano.balducci@gmail.com","login":"cbalducci","count":1},{"name":"dpetzel","email":"davidpetzel@gmail.com","login":"dpetzel","count":1},{"name":"faguirre1","email":"federico.aguirre@gmail.com","login":"faguirre1","count":1},{"name":"fonglh","email":"fonglh@gmail.com","login":"fonglh","count":1},{"name":"hyz0906","email":"hyz0906@gmail.com","login":"hyz0906","count":1},{"name":"ineb","email":"lneb@gmx.de","login":"ineb","count":1},{"name":"Aleksandr Zykov","email":"alexandrz@gmail.com","login":"sashazykov","count":1},{"name":"Alex Coomans","email":"alex@alexcoomans.com","login":"drcapulet","count":1},{"name":"Amos Benari","email":"abenari@redhat.com","login":"abenari","count":1},{"name":"Andrea Maria Piana","email":"andrea.maria.piana@gmail.com","login":"cammellos","count":1},{"name":"Balasankar C","email":"balasankar@gitlab.com","login":"balasankarc","count":1},{"name":"CoolElvis","email":"elvisplus2@gmail.com","login":"CoolElvis","count":1},{"name":"Corey Osman","email":"corey@logicminds.biz","login":"logicminds","count":1},{"name":"Daniel Lobato","email":"elobatocs@gmail.com","login":"dLobatog","count":1},{"name":"Daniel Schmidt","email":"dcschmidt@berkeley.edu","login":"danschmidt5189","count":1},{"name":"Felix Wong","email":"felix@xilef.org","login":"fawaf","count":1},{"name":"François de Metz","email":"francois@2metz.fr","login":"francois2metz","count":1},{"name":"Harald Sitter","email":"sitter@kde.org","login":"hsitter","count":1},{"name":"Ivan Kryak","email":"kryak.iv@gmail.com","login":"sck-v","count":1},{"name":"James Cuzella","email":"james.cuzella@lyraphase.com","login":"trinitronx","count":1},{"name":"Jason Hee","email":"jasonheecs@gmail.com","login":"jasonheecs","count":1},{"name":"Jean Boussier","email":"jean.boussier@gmail.com","login":"byroot","count":1},{"name":"Jim Hoskins","email":"jim@jimhoskins.com","login":"jimrhoskins","count":1},{"name":"Kevin Mullin","email":"kevin@kpmullin.com","login":"kmullin","count":1},{"name":"Kevin Ross","email":"kevin.ross@alienfast.com","login":"rosskevin","count":1},{"name":"Masataka Kuwabara","email":"kuwabara@pocke.me","login":"pocke","count":1},{"name":"Michael Rykov","email":"mrykov@gmail.com","login":"rykov","count":1},{"name":"Mohnish","email":"babymechanic@gmail.com","login":"babymechanic","count":1},{"name":"Oliver Shaw","email":"ollyjshaw@gmail.com","login":"ollyjshaw","count":1},{"name":"Patrick Hemmer","email":"patrick.hemmer@gmail.com","login":"phemmer","count":1},{"name":"Philippe Vaucher","email":"Silex","login":"Silex","count":1},{"name":"Pieter Van Isacker","email":"pieter.vanisacker@lightspeedhq.com","login":"ls-pieter-vanisacker","count":1},{"name":"René Meye","email":"rene@meye.md","login":"renemeye","count":1},{"name":"omurbek","email":"omurbek.jk@gmail.com","login":"omurbekjk","count":1}],"past_year_committers":[],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/upserve%2Fdocker-api/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-30T00:00:07.427Z","repositories_count":6223400,"commits_count":900013610,"contributors_count":34899913,"owners_count":1147632,"icon_url":"https://github.com/github.png","host_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories"}},"issues_stats":{"full_name":"upserve/docker-api","html_url":"https://github.com/upserve/docker-api","last_synced_at":"2026-03-06T20:01:28.382Z","status":"active","issues_count":85,"pull_requests_count":43,"avg_time_to_close_issue":84827344.95,"avg_time_to_close_pull_request":15948494.67857143,"issues_closed_count":60,"pull_requests_closed_count":28,"pull_request_authors_count":26,"issue_authors_count":75,"avg_comments_per_issue":2.5058823529411764,"avg_comments_per_pull_request":2.7674418604651163,"merged_pull_requests_count":16,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":5,"past_year_pull_requests_count":10,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":61915.25,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":4,"past_year_pull_request_authors_count":4,"past_year_issue_authors_count":3,"past_year_avg_comments_per_issue":0.4,"past_year_avg_comments_per_pull_request":0.2,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":2,"created_at":"2023-05-12T09:56:16.218Z","updated_at":"2026-03-06T20:01:28.382Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/upserve%2Fdocker-api","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/upserve%2Fdocker-api/issues","issue_labels_count":{},"pull_request_labels_count":{},"issue_author_associations_count":{"NONE":68,"CONTRIBUTOR":17},"pull_request_author_associations_count":{"CONTRIBUTOR":28,"NONE":15},"issue_authors":{"danschmidt5189":4,"ianfixes":4,"cmingxu":2,"sumdog":2,"trevor-vaughan":2,"jayantbh":2,"chasebolt":1,"dblooman":1,"bfosberry":1,"zoispag":1,"bradleyd":1,"scottrobertson":1,"TomNaessens":1,"bubodlack":1,"andrius":1,"ProxiBlue":1,"gongfarmer":1,"lucywyman":1,"anilgulecha":1,"hanks":1,"AlbinOS":1,"ElayneB":1,"onesuper":1,"waghanza":1,"apayden-mylo":1,"dansteen":1,"ftomassetti":1,"hezanathos":1,"rteusner":1,"tas50":1,"wlchn":1,"AdamBark":1,"lmayorga1980":1,"kaspernj":1,"bfulton":1,"photosojourn":1,"babymechanic":1,"bmhughes":1,"ilr39":1,"snavien":1,"fcecagno":1,"caleb":1,"jmauerhan":1,"valovm":1,"Tzrlk":1,"Filirom1":1,"zoi-aoba":1,"futantan":1,"c6decacb79e8ca046dcb61002aac5280":1,"mblaschke":1,"benningm":1,"monsterooo":1,"vadviktor":1,"nathanPro":1,"okleinschmidt":1,"envygeeks":1,"preston":1,"neurogenesis":1,"rfrowe":1,"rmoriz":1,"Govinda-Fichtner":1,"clintoncwolfe":1,"ghost":1,"b-dean":1,"ninomllr":1,"hekaldama":1,"adamdavis40208":1,"kk723":1,"davejrt":1,"grosser":1,"dvenrao":1,"aramgre":1,"grzesiek":1,"xsresearch":1,"apophizzz":1},"pull_request_authors":{"danschmidt5189":8,"kaspernj":4,"razumau":2,"ls-todd-lunter":2,"drewhammond":2,"heyvito":2,"bquorning":2,"jasonheecs":2,"tas50":2,"ekohl":1,"bastelfreak":1,"Thomascountz":1,"hekaldama":1,"ls-pieter-vanisacker":1,"dlackty":1,"nylkotuby":1,"CoolElvis":1,"tlunter":1,"Soulou":1,"ianfixes":1,"robbkidd":1,"nicolasleger":1,"iamwilhelm":1,"trevor-vaughan":1,"leoagomes":1,"ghostsquad":1},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-28T00:00:08.715Z","repositories_count":14435147,"issues_count":34366597,"pull_requests_count":112638795,"authors_count":11247416,"icon_url":"https://github.com/github.png","host_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories","owners_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/owners","authors_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors"},"past_year_issue_labels_count":{},"past_year_pull_request_labels_count":{},"past_year_issue_author_associations_count":{"NONE":2},"past_year_pull_request_author_associations_count":{"NONE":2},"past_year_issue_authors":{"gongfarmer":1,"TomNaessens":1},"past_year_pull_request_authors":{"bastelfreak":1,"Thomascountz":1},"maintainers":[],"active_maintainers":[]},"events":{"total":{"PullRequestEvent":12,"ForkEvent":11,"IssuesEvent":5,"WatchEvent":31,"IssueCommentEvent":32,"PushEvent":3,"PullRequestReviewCommentEvent":5,"PullRequestReviewEvent":5,"CreateEvent":1},"last_year":{"ForkEvent":3,"IssuesEvent":1,"WatchEvent":13}},"keywords":[],"dependencies":[{"ecosystem":"rubygems","filepath":"docker-api.gemspec","sha":null,"kind":"manifest","created_at":"2022-07-13T05:50:43.761Z","updated_at":"2022-07-13T05:50:43.761Z","repository_link":"https://github.com/upserve/docker-api/blob/master/docker-api.gemspec","dependencies":[{"id":213517146,"package_name":"excon","ecosystem":"rubygems","requirements":"\u003e= 0.47.0","direct":true,"kind":"runtime","optional":false},{"id":213517147,"package_name":"multi_json","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":213517148,"package_name":"rake","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":213517149,"package_name":"rspec","ecosystem":"rubygems","requirements":"~\u003e 3.0","direct":true,"kind":"development","optional":false},{"id":213517150,"package_name":"rspec-its","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":213517151,"package_name":"cane","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":213517152,"package_name":"pry","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":213517153,"package_name":"single_cov","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":213517154,"package_name":"webmock","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":213517155,"package_name":"parallel","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/unit_test.yml","sha":null,"kind":"manifest","created_at":"2024-06-18T11:18:00.041Z","updated_at":"2024-06-18T11:18:00.041Z","repository_link":"https://github.com/upserve/docker-api/blob/master/.github/workflows/unit_test.yml","dependencies":[{"id":18674621307,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":18674621308,"package_name":"ruby/setup-ruby","ecosystem":"actions","requirements":"v1","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"docker","filepath":"Dockerfile","sha":null,"kind":"manifest","created_at":"2024-06-18T11:18:00.338Z","updated_at":"2024-06-18T11:18:00.338Z","repository_link":"https://github.com/upserve/docker-api/blob/master/Dockerfile","dependencies":[{"id":18674621318,"package_name":"scratch","ecosystem":"docker","requirements":"latest","direct":true,"kind":"build","optional":false}]},{"ecosystem":"docker","filepath":"spec/fixtures/build_from_dir/Dockerfile","sha":null,"kind":"manifest","created_at":"2024-06-18T11:18:00.693Z","updated_at":"2024-06-18T11:18:00.693Z","repository_link":"https://github.com/upserve/docker-api/blob/master/spec/fixtures/build_from_dir/Dockerfile","dependencies":[{"id":18674621343,"package_name":"debian","ecosystem":"docker","requirements":"stable","direct":true,"kind":"build","optional":false}]},{"ecosystem":"docker","filepath":"spec/fixtures/top/Dockerfile","sha":null,"kind":"manifest","created_at":"2024-06-18T11:18:01.138Z","updated_at":"2024-06-18T11:18:01.138Z","repository_link":"https://github.com/upserve/docker-api/blob/master/spec/fixtures/top/Dockerfile","dependencies":[{"id":18674621379,"package_name":"debian","ecosystem":"docker","requirements":"stable","direct":true,"kind":"build","optional":false}]},{"ecosystem":"rubygems","filepath":"Gemfile","sha":null,"kind":"manifest","created_at":"2024-06-18T11:18:01.259Z","updated_at":"2024-06-18T11:18:01.259Z","repository_link":"https://github.com/upserve/docker-api/blob/master/Gemfile","dependencies":[]}],"score":null,"created_at":"2024-12-15T21:38:08.586Z","updated_at":"2026-04-30T04:02:26.644Z","avatar_url":"https://github.com/upserve.png","language":"Ruby","monthly_downloads":0,"readme":"docker-api\n==========\n[![Gem Version](https://badge.fury.io/rb/docker-api.svg)](https://badge.fury.io/rb/docker-api) [![Code Climate](https://codeclimate.com/github/upserve/docker-api.svg)](https://codeclimate.com/github/upserve/docker-api)\n\nThis 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.*\n\nIf you're interested in using Docker to package your apps, we recommend the [dockly](https://github.com/upserve/dockly) gem. Dockly provides a simple DSL for describing Docker containers that install as Debian packages and are controlled by upstart scripts.\n\nInstallation\n------------\n\nAdd this line to your application's Gemfile:\n\n```ruby\ngem 'docker-api'\n```\n\nAnd then run:\n\n```shell\n$ bundle install\n```\n\nAlternatively, if you wish to just use the gem in a script, you can run:\n\n```shell\n$ gem install docker-api\n```\n\nFinally, just add `require 'docker'` to the top of the file using this gem.\n\nUsage\n-----\n\ndocker-api is designed to be very lightweight. Almost no state is cached (aside from id's which are immutable) to ensure that each method call's information is up to date. As such, just about every external method represents an API call.\n\nAt this time, basic `podman` support has been added via the podman docker-compatible API socket.\n\n## Starting up\n\nFollow the [installation instructions](https://docs.docker.com/install/), and then run:\n\n```shell\n$ sudo docker -d\n```\n\nThis will daemonize Docker so that it can be used for the remote API calls.\n\n### Host\n\nIf you're running Docker locally as a socket, there is no setup to do in Ruby. If you're not using a socket or have changed the path of the socket, you'll have to point the gem to your socket or local/remote port. For example:\n\n```ruby\nDocker.url = 'tcp://example.com:5422'\n```\n\nTwo 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.\n\nAlso, you may set the above variables via `ENV` variables. For example:\n\n```shell\n$ DOCKER_URL=unix:///var/docker.sock irb\nirb(main):001:0\u003e require 'docker'\n=\u003e true\nirb(main):002:0\u003e Docker.url\n=\u003e \"unix:///var/docker.sock\"\nirb(main):003:0\u003e Docker.options\n=\u003e {}\n```\n\n```shell\n$ DOCKER_URL=tcp://example.com:1000 irb\nirb(main):001:0\u003e require 'docker'\n=\u003e true\nirb(main):003:0\u003e Docker.url\n=\u003e \"tcp://example.com:1000\"\nirb(main):004:0\u003e Docker.options\n=\u003e {}\n```\n\n### SSL\n\nWhen running docker using SSL, setting the DOCKER_CERT_PATH will configure docker-api to use SSL.\nThe cert path is a folder that contains the cert, key and cacert files.\ndocker-api is expecting the files to be named: cert.pem, key.pem, and ca.pem.\nIf your files are named different, you'll want to set your options explicity:\n\n```\nDocker.options = {\n    client_cert: File.join(cert_path, 'cert.pem'),\n    client_key: File.join(cert_path, 'key.pem'),\n    ssl_ca_file: File.join(cert_path, 'ca.pem'),\n    scheme: 'https'\n}\n```\n\nIf you want to load the cert files from a variable, e.g. you want to load them from ENV as needed on Heroku:\n\n```\ncert_store = OpenSSL::X509::Store.new\ncertificate = OpenSSL::X509::Certificate.new ENV[\"DOCKER_CA\"]\ncert_store.add_cert certificate\n\nDocker.options = {\n  client_cert_data: ENV[\"DOCKER_CERT\"],\n  client_key_data: ENV[\"DOCKER_KEY\"],\n  ssl_cert_store: cert_store,\n  scheme: 'https'\n}\n```\n\nIf you need to disable SSL verification, set the DOCKER_SSL_VERIFY variable to 'false'.\n\n## Global calls\n\nAll of the following examples require a connection to a Docker server. See the \u003ca href=\"#starting-up\"\u003eStarting up\u003c/a\u003e section above for more information.\n\n```ruby\nrequire 'docker'\n# =\u003e true\n\n# docker command for reference: docker version\nDocker.version\n# =\u003e { 'Version' =\u003e '0.5.2', 'GoVersion' =\u003e 'go1.1' }\n\n# docker command for reference: docker info\nDocker.info\n# =\u003e { \"Debug\" =\u003e false, \"Containers\" =\u003e 187, \"Images\" =\u003e 196, \"NFd\" =\u003e 10, \"NGoroutines\" =\u003e 9, \"MemoryLimit\" =\u003e true }\n\n# docker command for reference: docker login\nDocker.authenticate!('username' =\u003e 'docker-fan-boi', 'password' =\u003e 'i\u003c3docker', 'email' =\u003e 'dockerboy22@aol.com')\n# =\u003e true\n\n# docker command for reference: docker login registry.gitlab.com\nDocker.authenticate!('username' =\u003e 'docker-fan-boi', 'password' =\u003e 'i\u003c3docker', 'email' =\u003e 'dockerboy22@aol.com', 'serveraddress' =\u003e 'https://registry.gitlab.com/v1/')\n# =\u003e true\n```\n\n## Images\n\nJust about every method here has a one-to-one mapping with the [Images](https://docs.docker.com/engine/reference/api/docker_remote_api_v1.14/#2-2-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.\n\n```ruby\nrequire 'docker'\n# =\u003e true\n\n# Pull an Image.\n# docker command for reference: docker pull ubuntu:14.04\nimage = Docker::Image.create('fromImage' =\u003e 'ubuntu:14.04')\n# =\u003e Docker::Image { :id =\u003e ae7ffbcd1, :connection =\u003e Docker::Connection { :url =\u003e tcp://localhost, :options =\u003e {:port=\u003e2375} } }\n\n# Insert a local file into an Image.\nimage.insert_local('localPath' =\u003e 'Gemfile', 'outputPath' =\u003e '/')\n# =\u003e Docker::Image { :id =\u003e 682ea192f, :connection =\u003e Docker::Connection { :url =\u003e tcp://localhost, :options =\u003e {:port=\u003e2375} } }\n\n# Insert multiple local files into an Image.\nimage.insert_local('localPath' =\u003e [ 'Gemfile', 'Rakefile' ], 'outputPath' =\u003e '/')\n# =\u003e Docker::Image { :id =\u003e eb693ec80, :connection =\u003e Docker::Connection { :url =\u003e tcp://localhost, :options =\u003e {:port=\u003e2375} } }\n\n# Add a repo name to Image.\n# docker command for reference: docker tag \u003cIMAGE.ID\u003e base2\nimage.tag('repo' =\u003e 'base2', 'force' =\u003e true)\n# =\u003e [\"base2\"]\n\n# Add a repo name and tag an Image.\n# docker command for reference: docker tag \u003cIMAGE.ID\u003e base2:latest\nimage.tag('repo' =\u003e 'base2', 'tag' =\u003e 'latest', force: true)\n# =\u003e [\"base2:latest\"]\n\n# Get more information about the Image.\n# docker command for reference: docker inspect \u003cIMAGE.ID\u003e\nimage.json\n# =\u003e {\"id\"=\u003e\"67859327bf22ef8b5b9b4a6781f72b2015acd894fa03ce07e0db7af170ba468c\", \"comment\"=\u003e\"Imported from -\", \"created\"=\u003e\"2013-06-19T18:42:58.287944526-04:00\", \"container_config\"=\u003e{\"Hostname\"=\u003e\"\", \"User\"=\u003e\"\", \"Memory\"=\u003e0, \"MemorySwap\"=\u003e0, \"CpuShares\"=\u003e0, \"AttachStdin\"=\u003efalse, \"AttachStdout\"=\u003efalse, \"AttachStderr\"=\u003efalse, \"PortSpecs\"=\u003enil, \"Tty\"=\u003efalse, \"OpenStdin\"=\u003efalse, \"StdinOnce\"=\u003efalse, \"Env\"=\u003enil, \"Cmd\"=\u003enil, \"Dns\"=\u003enil, \"Image\"=\u003e\"\", \"Volumes\"=\u003enil, \"VolumesFrom\"=\u003e\"\"}, \"docker_version\"=\u003e\"0.4.0\", \"architecture\"=\u003e\"x86_64\"}\n\n# View the history of the Image.\nimage.history\n# =\u003e [{\"Id\"=\u003e\"67859327bf22\", \"Created\"=\u003e1371681778}]\n\n# Push the Image to the Docker registry. Note that you have to login using\n# `Docker.authenticate!` and tag the Image first.\n# docker command for reference: docker push \u003cIMAGE.ID\u003e\nimage.push\n# =\u003e Docker::Image { @connection =\u003e Docker::Connection { :url =\u003e tcp://localhost, :options =\u003e {:port=\u003e2375} }, @info = { \"id\" =\u003e eb693ec80, \"RepoTags\" =\u003e [\"base2\", \"base2/latest\"]} }\n\n# Push individual tag to the Docker registry.\nimage.push(nil, tag: \"tag_name\")\nimage.push(nil, repo_tag: 'registry/repo_name:tag_name')\n\n# Given a command, create a new Container to run that command in the Image.\n# docker command for reference: docker run -ti \u003cIMAGE.ID\u003e ls -l\nimage.run('ls -l')\n# =\u003e Docker::Container { id =\u003e aaef712eda, :connection =\u003e Docker::Connection { :url =\u003e tcp://localhost, :options =\u003e {:port=\u003e2375} } }\n\n# Remove the Image from the server.\n# docker command for reference: docker rmi -f \u003cIMAGE.ID\u003e\nimage.remove(:force =\u003e true)\n# =\u003e true\n\n# Export a single Docker Image to a file\n# docker command for reference: docker save \u003cIMAGE.ID\u003e my_export.tar\nimage.save('my_export.tar')\n# =\u003e Docker::Image { :id =\u003e 66b712aef, :connection =\u003e Docker::Connection { :url =\u003e tcp://localhost, :options =\u003e {:port=\u003e2375} } }\n\n# Return the raw image binary data\nimage.save\n# =\u003e \"abiglongbinarystring\"\n\n# Stream the contents of the image to a block:\nimage.save_stream { |chunk| puts chunk }\n# =\u003e nil\n\n# Given a Container's export, creates a new Image.\n# docker command for reference: docker import some-export.tar\nDocker::Image.import('some-export.tar')\n# =\u003e Docker::Image { :id =\u003e 66b712aef, :connection =\u003e Docker::Connection { :url =\u003e tcp://localhost, :options =\u003e {:port=\u003e2375} } }\n\n# `Docker::Image.import` can also import from a URI\nDocker::Image.import('http://some-site.net/my-image.tar')\n# =\u003e Docker::Image { :id =\u003e 6b462b2d2, :connection =\u003e Docker::Connection { :url =\u003e tcp://localhost, :options =\u003e {:port=\u003e2375} } }\n\n# For a lower-level interface for importing tars, `Docker::Image.import_stream` may be used.\n# It accepts a block, and will call that block until it returns an empty `String`.\nFile.open('my-export.tar') do |file|\n  Docker::Image.import_stream { file.read(1000).to_s }\nend\n\n# Create an Image from a Dockerfile as a String.\nDocker::Image.build(\"from base\\nrun touch /test\")\n# =\u003e Docker::Image { :id =\u003e b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc, :connection =\u003e Docker::Connection { :url =\u003e tcp://localhost, :options =\u003e {:port=\u003e2375} } }\n\n# Create an Image from a Dockerfile.\n# docker command for reference: docker build .\nDocker::Image.build_from_dir('.')\n# =\u003e Docker::Image { :id =\u003e 1266dc19e, :connection =\u003e Docker::Connection { :url =\u003e tcp://localhost, :options =\u003e {:port=\u003e2375} } }\n\n# Create an Image from a file other than Dockerfile.\n# docker command for reference: docker build -f Dockerfile.Centos .\nDocker::Image.build_from_dir('.', { 'dockerfile' =\u003e 'Dockerfile.Centos' })\n# =\u003e Docker::Image { :id =\u003e 1266dc19e, :connection =\u003e Docker::Connection { :url =\u003e tcp://localhost, :options =\u003e {:port=\u003e2375} } }\n\n# Create an Image from a Dockerfile and stream the logs\nDocker::Image.build_from_dir('.') do |v|\n  if (log = JSON.parse(v)) \u0026\u0026 log.has_key?(\"stream\")\n    $stdout.puts log[\"stream\"]\n  end\nend\n\n# Create an Image from a tar file.\n# docker command for reference: docker build - \u003c docker_image.tar\nDocker::Image.build_from_tar(File.open('docker_image.tar', 'r'))\n# =\u003e Docker::Image { :id =\u003e 1266dc19e, :connection =\u003e Docker::Connection { :url =\u003e tcp://localhost, :options =\u003e {:port=\u003e2375} } }\n\n# Load all Images on your Docker server.\n# docker command for reference: docker images\nDocker::Image.all\n# =\u003e [Docker::Image { :id =\u003e b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc, :connection =\u003e Docker::Connection { :url =\u003e tcp://localhost, :options =\u003e {:port=\u003e2375} } }, Docker::Image { :id =\u003e 8dbd9e392a964056420e5d58ca5cc376ef18e2de93b5cc90e868a1bbc8318c1c, :connection =\u003e Docker::Connection { :url =\u003e tcp://localhost, :options =\u003e {:port=\u003e2375} } }]\n\n# Get Image from the server, with id\n# docker command for reference: docker images \u003cIMAGE.ID\u003e\nDocker::Image.get('df4f1bdecf40')\n# =\u003e Docker::Image { :id =\u003e eb693ec80, :connection =\u003e Docker::Connection { :url =\u003e tcp://localhost, :options =\u003e {:port=\u003e2375} } }\n\n# Check if an image with a given id exists on the server.\nDocker::Image.exist?('ef723dcdac09')\n# =\u003e true\n\n# Load an image from the file system\nDocker::Image.load('./my-image.tar')\n# =\u003e \"\"\n\n# An IO object may also be specified for loading\nFile.open('./my-image.tar', 'rb') do |file|\n  Docker::Image.load(file)\nend\n# =\u003e \"\"\n\n# Export multiple images to a single tarball\n# docker command for reference: docker save my_image1 my_image2:not_latest \u003e my_export.tar\nnames = %w( my_image1 my_image2:not_latest )\nDocker::Image.save(names, 'my_export.tar')\n# =\u003e nil\n\n# Return the raw image binary data\nnames = %w( my_image1 my_image2:not_latest )\nDocker::Image.save(names)\n# =\u003e \"abiglongbinarystring\"\n\n# Stream the raw binary data\nnames = %w( my_image1 my_image2:not_latest )\nDocker::Image.save_stream(names) { |chunk| puts chunk }\n# =\u003e nil\n\n# Search the Docker registry.\n# docker command for reference: docker search sshd\nDocker::Image.search('term' =\u003e 'sshd')\n# =\u003e [Docker::Image { :id =\u003e cespare/sshd, :connection =\u003e Docker::Connection { :url =\u003e tcp://localhost, :options =\u003e {:port=\u003e2375} } }, Docker::Image { :id =\u003e johnfuller/sshd, :connection =\u003e Docker::Connection { :url =\u003e tcp://localhost, :options =\u003e {:port=\u003e2375} } }, Docker::Image { :id =\u003e dhrp/mongodb-sshd, :connection =\u003e Docker::Connection { :url =\u003e tcp://localhost, :options =\u003e {:port=\u003e2375} } }, Docker::Image { :id =\u003e rayang2004/sshd, :connection =\u003e Docker::Connection { :url =\u003e tcp://localhost, :options =\u003e {:port=\u003e2375} } }, Docker::Image { :id =\u003e dhrp/sshd, :connection =\u003e Docker::Connection { :url =\u003e tcp://localhost, :options =\u003e {:port=\u003e2375} } }, Docker::Image { :id =\u003e toorop/daemontools-sshd, :connection =\u003e Docker::Connection { :url =\u003e tcp://localhost, :options =\u003e {:port=\u003e2375} } }, Docker::Image { :id =\u003e toorop/daemontools-sshd-nginx, :connection =\u003e Docker::Connection { :url =\u003e tcp://localhost, :options =\u003e {:port=\u003e2375} } }, Docker::Image { :id =\u003e toorop/daemontools-sshd-nginx-php-fpm, :connection =\u003e Docker::Connection { :url =\u003e tcp://localhost, :options =\u003e {:port=\u003e2375} } }, Docker::Image { :id =\u003e mbkan/lamp, :connection =\u003e Docker::Connection { :url =\u003e tcp://localhost, :options =\u003e {:port=\u003e2375} } }, Docker::Image { :id =\u003e toorop/golang, :connection =\u003e Docker::Connection { :url =\u003e tcp://localhost, :options =\u003e {:port=\u003e2375} } }, Docker::Image { :id =\u003e wma55/u1210sshd, :connection =\u003e Docker::Connection { :url =\u003e tcp://localhost, :options =\u003e {:port=\u003e2375} } }, Docker::Image { :id =\u003e jdswinbank/sshd, :connection =\u003e Docker::Connection { :url =\u003e tcp://localhost, :options =\u003e {:port=\u003e2375} } }, Docker::Image { :id =\u003e vgauthier/sshd, :connection =\u003e Docker::Connection { :url =\u003e tcp://localhost, :options =\u003e {:port=\u003e2375} } }]\n```\n\n## Containers\n\nMuch like the Images, this object also has a one-to-one mapping with the [Containers](https://docs.docker.com/engine/reference/api/docker_remote_api_v1.14/#2-1-containers) section of the API. Also like Images, `.new` is a private method, so you must use `.create` to make an instance.\n\n```ruby\nrequire 'docker'\n\n# Create a Container.\ncontainer = Docker::Container.create('Cmd' =\u003e ['ls'], 'Image' =\u003e 'base')\n# =\u003e Docker::Container { :id =\u003e 492510dd38e4, :connection =\u003e Docker::Connection { :url =\u003e tcp://localhost, :options =\u003e {:port=\u003e2375} } }\n\n# Get more information about the Container.\ncontainer.json\n# =\u003e {\"ID\"=\u003e\"492510dd38e4da7703f36dfccd013de672b8250f57f59d1555ced647766b5e82\", \"Created\"=\u003e\"2013-06-20T10:46:02.897548-04:00\", \"Path\"=\u003e\"ls\", \"Args\"=\u003e[], \"Config\"=\u003e{\"Hostname\"=\u003e\"492510dd38e4\", \"User\"=\u003e\"\", \"Memory\"=\u003e0, \"MemorySwap\"=\u003e0, \"CpuShares\"=\u003e0, \"AttachStdin\"=\u003efalse, \"AttachStdout\"=\u003efalse, \"AttachStderr\"=\u003efalse, \"PortSpecs\"=\u003enil, \"Tty\"=\u003efalse, \"OpenStdin\"=\u003efalse, \"StdinOnce\"=\u003efalse, \"Env\"=\u003enil, \"Cmd\"=\u003e[\"ls\"], \"Dns\"=\u003enil, \"Image\"=\u003e\"base\", \"Volumes\"=\u003enil, \"VolumesFrom\"=\u003e\"\"}, \"State\"=\u003e{\"Running\"=\u003efalse, \"Pid\"=\u003e0, \"ExitCode\"=\u003e0, \"StartedAt\"=\u003e\"0001-01-01T00:00:00Z\", \"Ghost\"=\u003efalse}, \"Image\"=\u003e\"b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc\", \"NetworkSettings\"=\u003e{\"IpAddress\"=\u003e\"\", \"IpPrefixLen\"=\u003e0, \"Gateway\"=\u003e\"\", \"Bridge\"=\u003e\"\", \"PortMapping\"=\u003enil}, \"SysInitPath\"=\u003e\"/usr/bin/docker\", \"ResolvConfPath\"=\u003e\"/etc/resolv.conf\", \"Volumes\"=\u003enil}\n\n# Start running the Container.\ncontainer.start\n# =\u003e Docker::Container { :id =\u003e 492510dd38e4, :connection =\u003e Docker::Connection { :url =\u003e tcp://localhost, :options =\u003e {:port=\u003e2375} } }\n\n# Stop running the Container.\ncontainer.stop\n# =\u003e Docker::Container { :id =\u003e 492510dd38e4, :connection =\u003e Docker::Connection { :url =\u003e tcp://localhost, :options =\u003e {:port=\u003e2375} } }\n\n# Restart the Container.\ncontainer.restart\n# =\u003e Docker::Container { :id =\u003e 492510dd38e4, :connection =\u003e Docker::Connection { :url =\u003e tcp://localhost, :options =\u003e {:port=\u003e2375} } }\n\n# Pause the running Container processes.\ncontainer.pause\n# =\u003e Docker::Container { :id =\u003e 492510dd38e4, :connection =\u003e Docker::Connection { :url =\u003e tcp://localhost, :options =\u003e {:port=\u003e2375} } }\n\n# Unpause the running Container processes.\ncontainer.unpause\n# =\u003e Docker::Container { :id =\u003e 492510dd38e4, :connection =\u003e Docker::Connection { :url =\u003e tcp://localhost, :options =\u003e {:port=\u003e2375} } }\n\n# Kill the command running in the Container.\ncontainer.kill\n# =\u003e Docker::Container { :id =\u003e 492510dd38e4, :connection =\u003e Docker::Connection { :url =\u003e tcp://localhost, :options =\u003e {:port=\u003e2375} } }\n\n# Kill the Container specifying the kill signal.\ncontainer.kill(:signal =\u003e \"SIGHUP\")\n# =\u003e Docker::Container { :id =\u003e 492510dd38e4, :connection =\u003e Docker::Connection { :url =\u003e tcp://localhost, :options =\u003e {:port=\u003e2375} } }\n\n# Return the currently executing processes in a Container.\ncontainer.top\n# =\u003e [{\"PID\"=\u003e\"4851\", \"TTY\"=\u003e\"pts/0\", \"TIME\"=\u003e\"00:00:00\", \"CMD\"=\u003e\"lxc-start\"}]\n\n# Same as above, but uses the original format\ncontainer.top(format: :hash)\n# =\u003e {\n#      \"Titles\" =\u003e [\"PID\", \"TTY\", \"TIME\", \"CMD\"],\n#      \"Processes\" =\u003e [[\"4851\", \"pts/0\", \"00:00:00\", \"lxc-start\"]]\n#    }\n\n# To expose 1234 to bridge\n# In Dockerfile: EXPOSE 1234/tcp\n# docker run resulting-image-name\nDocker::Container.create(\n  'Image' =\u003e 'image-name',\n  'HostConfig' =\u003e {\n    'PortBindings' =\u003e {\n      '1234/tcp' =\u003e [{}]\n    }\n  }\n)\n\n# To expose 1234 to host with any port\n# docker run -p 1234 image-name\nDocker::Container.create(\n  'Image' =\u003e 'image-name',\n  'ExposedPorts' =\u003e { '1234/tcp' =\u003e {} },\n  'HostConfig' =\u003e {\n    'PortBindings' =\u003e {\n      '1234/tcp' =\u003e [{}]\n    }\n  }\n)\n\n# To expose 1234 to host with a specified host port\n# docker run -p 1234:1234 image-name\nDocker::Container.create(\n  'Image' =\u003e 'image-name',\n  'ExposedPorts' =\u003e { '1234/tcp' =\u003e {} },\n  'HostConfig' =\u003e {\n    'PortBindings' =\u003e {\n      '1234/tcp' =\u003e [{ 'HostPort' =\u003e '1234' }]\n    }\n  }\n)\n\n# To expose 1234 to host with a specified host port and host IP\n# docker run -p 192.168.99.100:1234:1234 image-name\nDocker::Container.create(\n  'Image' =\u003e 'image-name',\n  'ExposedPorts' =\u003e { '1234/tcp' =\u003e {} },\n  'HostConfig' =\u003e {\n    'PortBindings' =\u003e {\n      '1234/tcp' =\u003e [{ 'HostPort' =\u003e '1234', 'HostIp' =\u003e '192.168.99.100' }]\n    }\n  }\n)\n\n# To set container name pass `name` key to options\nDocker::Container.create(\n  'name' =\u003e 'my-new-container',\n  'Image' =\u003e 'image-name'\n)\n\n# Stores a file with the given content in the container\ncontainer.store_file(\"/test\", \"Hello world\")\n\n# Reads a file from the container\ncontainer.read_file(\"/test\")\n# =\u003e \"Hello world\"\n\n# Export a Container. Since an export is typically at least 300M, chunks of the\n# export are yielded instead of just returning the whole thing.\nFile.open('export.tar', 'w') do |file|\n  container.export { |chunk| file.write(chunk) }\nend\n# =\u003e nil\n\n# Inspect a Container's changes to the file system.\ncontainer.changes\n# =\u003e [{'Path'=\u003e'/dev', 'Kind'=\u003e0}, {'Path'=\u003e'/dev/kmsg', 'Kind'=\u003e1}]\n\n# Copy files/directories from the Container. Note that these are exported as tars.\ncontainer.archive_out('/etc/hosts') { |chunk| puts chunk }\n\nhosts0000644000000000000000000000023412100405636007023 0ustar\n127.0.0.1       localhost\n::1             localhost ip6-localhost ip6-loopback\nfe00::0         ip6-localnet\nff00::0         ip6-mcastprefix\nff02::1         ip6-allnodes\nff02::2         ip6-allrouters\n# =\u003e Docker::Container { :id =\u003e a1759f3e2873, :connection =\u003e Docker::Connection { :url =\u003e tcp://localhost, :options =\u003e {:port=\u003e2375} } }\n\n# Wait for the current command to finish executing. If an argument is given,\n# will timeout after that number of seconds. The default is one minute.\ncontainer.wait(15)\n# =\u003e {'StatusCode'=\u003e0}\n\n# Attach to the Container. Currently, the below options are the only valid ones.\n# By default, :stream, :stdout, and :stderr are set.\ncontainer.attach(:stream =\u003e true, :stdin =\u003e nil, :stdout =\u003e true, :stderr =\u003e true, :logs =\u003e true, :tty =\u003e false)\n# =\u003e [[\"bin\\nboot\\ndev\\netc\\nhome\\nlib\\nlib64\\nmedia\\nmnt\\nopt\\nproc\\nroot\\nrun\\nsbin\\nselinux\\nsrv\\nsys\\ntmp\\nusr\\nvar\", []]\n\n# If you wish to stream the attach method, a block may be supplied.\ncontainer = Docker::Container.create('Image' =\u003e 'base', 'Cmd' =\u003e ['find / -name *'])\ncontainer.tap(\u0026:start).attach { |stream, chunk| puts \"#{stream}: #{chunk}\" }\nstderr: 2013/10/30 17:16:24 Unable to locate find / -name *\n# =\u003e [[], [\"2013/10/30 17:16:24 Unable to locate find / -name *\\n\"]]\n\n# If you want to attach to stdin of the container, supply an IO-like object:\ncontainer = Docker::Container.create('Image' =\u003e 'base', 'Cmd' =\u003e ['cat'], 'OpenStdin' =\u003e true, 'StdinOnce' =\u003e true)\ncontainer.tap(\u0026:start).attach(stdin: StringIO.new(\"foo\\nbar\\n\"))\n# =\u003e [[\"foo\\nbar\\n\"], []]\n\n# Similar to the stdout/stderr attach method, there is logs and streaming_logs\n\n# logs will only return after the container has exited. The output will be the raw output from the logs stream.\n# 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)\n\n# Raw logs from a TTY-enabled container after exit\ncontainer.logs(stdout: true)\n# =\u003e \"\\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\"\n\n# Logs from a non-TTY container with multiplex prefix\ncontainer.logs(stdout: true)\n# =\u003e \"\\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\"\n\n# Streaming logs from non-TTY container removing multiplex prefix with a block printing out each line (block not possible with Container#logs)\ncontainer.streaming_logs(stdout: true) { |stream, chunk| puts \"#{stream}: #{chunk}\" }\nstdout: 1\nstdout: 2\nstdout: 3\nstdout: 4\nstdout: 5\nstdout: 6\nstdout: 7\nstdout: 8\nstdout: 9\nstdout: 10\n# =\u003e \"1\\n\\n2\\n\\n3\\n\\n4\\n\\n5\\n\\n6\\n\\n7\\n\\n8\\n\\n9\\n\\n10\\n\"\n\n# If the container has TTY enabled, set `tty =\u003e true` to get the raw stream:\ncommand = [\"bash\", \"-c\", \"if [ -t 1 ]; then echo -n \\\"I'm a TTY!\\\"; fi\"]\ncontainer = Docker::Container.create('Image' =\u003e 'ubuntu', 'Cmd' =\u003e command, 'Tty' =\u003e true)\ncontainer.tap(\u0026:start).attach(:tty =\u003e true)\n# =\u003e [[\"I'm a TTY!\"], []]\n\n# Obtaining the current statistics of a container\ncontainer.stats\n# =\u003e {\"read\"=\u003e\"2016-02-29T20:47:05.221608695Z\", \"precpu_stats\"=\u003e{\"cpu_usage\"=\u003e ... }\n\n# Create an Image from a Container's changes.\ncontainer.commit\n# =\u003e Docker::Image { :id =\u003e eaeb8d00efdf, :connection =\u003e Docker::Connection { :url =\u003e tcp://localhost, :options =\u003e {:port=\u003e2375} } }\n\n# Commit the Container and run a new command. The second argument is the number\n# of seconds the Container should wait before stopping its current command.\ncontainer.run('pwd', 10)\n# =\u003e Docker::Image { :id =\u003e 4427be4199ac, :connection =\u003e Docker::Connection { :url =\u003e tcp://localhost, :options =\u003e {:port=\u003e2375} } }\n\n# Run an Exec instance inside the container and capture its output and exit status\ncontainer.exec(['date'])\n# =\u003e [[\"Wed Nov 26 11:10:30 CST 2014\\n\"], [], 0]\n\n# Launch an Exec instance without capturing its output or status\ncontainer.exec(['./my_service'], detach: true)\n# =\u003e Docker::Exec { :id =\u003e be4eaeb8d28a, :connection =\u003e Docker::Connection { :url =\u003e tcp://localhost, :options =\u003e {:port=\u003e2375} } }\n\n# Parse the output of an Exec instance\ncontainer.exec(['find', '/', '-name *']) { |stream, chunk| puts \"#{stream}: #{chunk}\" }\nstderr: 2013/10/30 17:16:24 Unable to locate find / -name *\n# =\u003e [[], [\"2013/10/30 17:16:24 Unable to locate find / -name *\\n\"], 1]\n\n# Run an Exec instance by grab only the STDOUT output\ncontainer.exec(['date'], stderr: false)\n# =\u003e [[\"Wed Nov 26 11:10:30 CST 2014\\n\"], [], 0]\n\n# Pass input to an Exec instance command via Stdin\ncontainer.exec(['cat'], stdin: StringIO.new(\"foo\\nbar\\n\"))\n# =\u003e [[\"foo\\nbar\\n\"], [], 0]\n\n# Get the raw stream of data from an Exec instance\ncommand = [\"bash\", \"-c\", \"if [ -t 1 ]; then echo -n \\\"I'm a TTY!\\\"; fi\"]\ncontainer.exec(command, tty: true)\n# =\u003e [[\"I'm a TTY!\"], [], 0]\n\n# Wait for the current command to finish executing. If an argument is given,\n# will timeout after that number of seconds. The default is one minute.\ncommand = [\"bash\", \"-c\", \"if [ -t 1 ]; then echo -n \\\"Set max seconds for exec!!\\\"; fi\"]\ncontainer.exec(command, wait: 120)\n# =\u003e [[\"Set max seconds for exec!\"], [], 0]\n\n# Delete a Container.\ncontainer.delete(:force =\u003e true)\n# =\u003e nil\n\n# Update the container.\ncontainer.update(\"CpuShares\" =\u003e 50000\")\n\n# Request a Container by ID or name.\nDocker::Container.get('500f53b25e6e')\n# =\u003e Docker::Container { :id =\u003e , :connection =\u003e Docker::Connection { :url =\u003e tcp://localhost, :options =\u003e {:port=\u003e2375} } }\n\n# Request all of the Containers. By default, will only return the running Containers.\nDocker::Container.all(:all =\u003e true)\n# =\u003e [Docker::Container { :id =\u003e , :connection =\u003e Docker::Connection { :url =\u003e tcp://localhost, :options =\u003e {:port=\u003e2375} } }]\n```\n\n## JSON encoded values\n\nFor JSON encoded values, nothing is done implicitly, meaning you need to explicitly call `to_json` on your parameter before the call. For example, to request all of the Containers using a filter:\n\n```ruby\nrequire 'docker'\n\n# Request all of the Containers, filtering by status exited.\nDocker::Container.all(all: true, filters: { status: [\"exited\"] }.to_json)\n# =\u003e [Docker::Container { :id =\u003e , :connection =\u003e Docker::Connection { :url =\u003e tcp://localhost, :options =\u003e {:port=\u003e2375} } }]\n\n# Request all of the Container, filtering by label_name.\nDocker::Container.all(all: true, filters: { label: [ \"label_name\"  ]  }.to_json)\n# =\u003e [Docker::Container { :id =\u003e , :connection =\u003e Docker::Connection { :url =\u003e tcp://localhost, :options =\u003e {:port=\u003e2375} } }]\n\n# Request all of the Container, filtering by label label_name that have the value label_value_.\nDocker::Container.all(all: true, filters: { label: [ \"label_name=label_value\"  ]  }.to_json)\n# =\u003e [Docker::Container { :id =\u003e , :connection =\u003e Docker::Connection { :url =\u003e tcp://localhost, :options =\u003e {:port=\u003e2375} } }]\n```\n\nThis applies for all parameters that are requested to be JSON encoded by the docker api.\n\n## Events\n\n```ruby\nrequire 'docker'\n\n# Action on a stream of events as they come in\nDocker::Event.stream { |event| puts event; break }\nDocker::Event { :status =\u003e create, :id =\u003e aeb8b55726df63bdd69d41e1b2650131d7ce32ca0d2fa5cbc75f24d0df34c7b0, :from =\u003e base:latest, :time =\u003e 1416958554 }\n# =\u003e nil\n\n# 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)\nDocker::Event.since(1416958763) { |event| puts event; puts Time.now.to_i; break }\nDocker::Event { :status =\u003e die, :id =\u003e 663005cdeb56f50177c395a817dbc8bdcfbdfbdaef329043b409ecb97fb68d7e, :from =\u003e base:latest, :time =\u003e 1416958764 }\n1416959041\n# =\u003e nil\n```\n\nThese methods are prone to read timeouts. The timeout can be disabled by setting it to zero, or simply made much higher:\n\n```ruby\n# Disable timeouts completely\nDocker::Event.stream({ read_timeout: 0 }) { |event| … }\n\n# Timeout if no events are received in 24h\nDocker::Event.stream({ read_timeout: 60 * 60 * 24) }) { |event| … }\n\n# Set a high timeout globally. Be warned that you probably don't want this for other methods.\nDocker.options[:read_timeout] = 60 * 60 * 24\nDocker::Event.stream { |event| … }\n```\n\n## Connecting to Multiple Servers\n\nBy 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:\n\n```ruby\nrequire 'docker'\n\nDocker::Container.all({}, Docker::Connection.new('tcp://example.com:2375', {}))\n```\n\n## Rake Task\n\nTo create images through `rake`, a DSL task is provided. For example:\n\n\n```ruby\nrequire 'rake'\nrequire 'docker'\n\nimage 'repo:tag' do\n  image = Docker::Image.create('fromImage' =\u003e 'repo', 'tag' =\u003e 'old_tag')\n  image = Docker::Image.run('rm -rf /etc').commit\n  image.tag('repo' =\u003e 'repo', 'tag' =\u003e 'tag')\nend\n\nimage 'repo:new_tag' =\u003e 'repo:tag' do\n  image = Docker::Image.create('fromImage' =\u003e 'repo', 'tag' =\u003e 'tag')\n  image = image.insert_local('localPath' =\u003e 'some-file.tar.gz', 'outputPath' =\u003e '/')\n  image.tag('repo' =\u003e 'repo', 'tag' =\u003e 'new_tag')\nend\n```\n\n## Not supported (yet)\n\n*   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\n*   Load a tarball generated from docker that contains all the images and metadata of a repository: https://docs.docker.com/engine/reference/api/docker_remote_api_v1.14/#load-a-tarball-with-a-set-of-images-and-tags-into-docker\n\nLicense\n-----\n\nThis program is licensed under the MIT license. See LICENSE for details.\n","funding_links":[],"readme_doi_urls":[],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":["activerecord","activejob","mvc","rubygems","rubocop","rspec","code-formatter","static-code-analysis","rack","ruby-gem"],"project_url":"https://ruby.ecosyste.ms/api/v1/projects/635","html_url":"https://ruby.ecosyste.ms/projects/635"}