docker_remote_api_v1.10.rst 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284
  1. :title: Remote API v1.10
  2. :description: API Documentation for Docker
  3. :keywords: API, Docker, rcli, REST, documentation
  4. :orphan:
  5. =======================
  6. Docker Remote API v1.10
  7. =======================
  8. .. contents:: Table of Contents
  9. 1. Brief introduction
  10. =====================
  11. - The Remote API has replaced rcli
  12. - The daemon listens on ``unix:///var/run/docker.sock``, but you can
  13. :ref:`bind_docker`.
  14. - The API tends to be REST, but for some complex commands, like
  15. ``attach`` or ``pull``, the HTTP connection is hijacked to transport
  16. ``stdout, stdin`` and ``stderr``
  17. 2. Endpoints
  18. ============
  19. 2.1 Containers
  20. --------------
  21. List containers
  22. ***************
  23. .. http:get:: /containers/json
  24. List containers
  25. **Example request**:
  26. .. sourcecode:: http
  27. GET /containers/json?all=1&before=8dfafdbc3a40&size=1 HTTP/1.1
  28. **Example response**:
  29. .. sourcecode:: http
  30. HTTP/1.1 200 OK
  31. Content-Type: application/json
  32. [
  33. {
  34. "Id": "8dfafdbc3a40",
  35. "Image": "base:latest",
  36. "Command": "echo 1",
  37. "Created": 1367854155,
  38. "Status": "Exit 0",
  39. "Ports":[{"PrivatePort": 2222, "PublicPort": 3333, "Type": "tcp"}],
  40. "SizeRw":12288,
  41. "SizeRootFs":0
  42. },
  43. {
  44. "Id": "9cd87474be90",
  45. "Image": "base:latest",
  46. "Command": "echo 222222",
  47. "Created": 1367854155,
  48. "Status": "Exit 0",
  49. "Ports":[],
  50. "SizeRw":12288,
  51. "SizeRootFs":0
  52. },
  53. {
  54. "Id": "3176a2479c92",
  55. "Image": "base:latest",
  56. "Command": "echo 3333333333333333",
  57. "Created": 1367854154,
  58. "Status": "Exit 0",
  59. "Ports":[],
  60. "SizeRw":12288,
  61. "SizeRootFs":0
  62. },
  63. {
  64. "Id": "4cb07b47f9fb",
  65. "Image": "base:latest",
  66. "Command": "echo 444444444444444444444444444444444",
  67. "Created": 1367854152,
  68. "Status": "Exit 0",
  69. "Ports":[],
  70. "SizeRw":12288,
  71. "SizeRootFs":0
  72. }
  73. ]
  74. :query all: 1/True/true or 0/False/false, Show all containers. Only running containers are shown by default
  75. :query limit: Show ``limit`` last created containers, include non-running ones.
  76. :query since: Show only containers created since Id, include non-running ones.
  77. :query before: Show only containers created before Id, include non-running ones.
  78. :query size: 1/True/true or 0/False/false, Show the containers sizes
  79. :statuscode 200: no error
  80. :statuscode 400: bad parameter
  81. :statuscode 500: server error
  82. Create a container
  83. ******************
  84. .. http:post:: /containers/create
  85. Create a container
  86. **Example request**:
  87. .. sourcecode:: http
  88. POST /containers/create HTTP/1.1
  89. Content-Type: application/json
  90. {
  91. "Hostname":"",
  92. "User":"",
  93. "Memory":0,
  94. "MemorySwap":0,
  95. "AttachStdin":false,
  96. "AttachStdout":true,
  97. "AttachStderr":true,
  98. "PortSpecs":null,
  99. "Tty":false,
  100. "OpenStdin":false,
  101. "StdinOnce":false,
  102. "Env":null,
  103. "Cmd":[
  104. "date"
  105. ],
  106. "Dns":null,
  107. "Image":"base",
  108. "Volumes":{
  109. "/tmp": {}
  110. },
  111. "VolumesFrom":"",
  112. "WorkingDir":"",
  113. "ExposedPorts":{
  114. "22/tcp": {}
  115. }
  116. }
  117. **Example response**:
  118. .. sourcecode:: http
  119. HTTP/1.1 201 OK
  120. Content-Type: application/json
  121. {
  122. "Id":"e90e34656806"
  123. "Warnings":[]
  124. }
  125. :jsonparam config: the container's configuration
  126. :query name: Assign the specified name to the container. Must match ``/?[a-zA-Z0-9_-]+``.
  127. :statuscode 201: no error
  128. :statuscode 404: no such container
  129. :statuscode 406: impossible to attach (container not running)
  130. :statuscode 500: server error
  131. Inspect a container
  132. *******************
  133. .. http:get:: /containers/(id)/json
  134. Return low-level information on the container ``id``
  135. **Example request**:
  136. .. sourcecode:: http
  137. GET /containers/4fa6e0f0c678/json HTTP/1.1
  138. **Example response**:
  139. .. sourcecode:: http
  140. HTTP/1.1 200 OK
  141. Content-Type: application/json
  142. {
  143. "Id": "4fa6e0f0c6786287e131c3852c58a2e01cc697a68231826813597e4994f1d6e2",
  144. "Created": "2013-05-07T14:51:42.041847+02:00",
  145. "Path": "date",
  146. "Args": [],
  147. "Config": {
  148. "Hostname": "4fa6e0f0c678",
  149. "User": "",
  150. "Memory": 0,
  151. "MemorySwap": 0,
  152. "AttachStdin": false,
  153. "AttachStdout": true,
  154. "AttachStderr": true,
  155. "PortSpecs": null,
  156. "Tty": false,
  157. "OpenStdin": false,
  158. "StdinOnce": false,
  159. "Env": null,
  160. "Cmd": [
  161. "date"
  162. ],
  163. "Dns": null,
  164. "Image": "base",
  165. "Volumes": {},
  166. "VolumesFrom": "",
  167. "WorkingDir":""
  168. },
  169. "State": {
  170. "Running": false,
  171. "Pid": 0,
  172. "ExitCode": 0,
  173. "StartedAt": "2013-05-07T14:51:42.087658+02:01360",
  174. "Ghost": false
  175. },
  176. "Image": "b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc",
  177. "NetworkSettings": {
  178. "IpAddress": "",
  179. "IpPrefixLen": 0,
  180. "Gateway": "",
  181. "Bridge": "",
  182. "PortMapping": null
  183. },
  184. "SysInitPath": "/home/kitty/go/src/github.com/dotcloud/docker/bin/docker",
  185. "ResolvConfPath": "/etc/resolv.conf",
  186. "Volumes": {},
  187. "HostConfig": {
  188. "Binds": null,
  189. "ContainerIDFile": "",
  190. "LxcConf": [],
  191. "Privileged": false,
  192. "PortBindings": {
  193. "80/tcp": [
  194. {
  195. "HostIp": "0.0.0.0",
  196. "HostPort": "49153"
  197. }
  198. ]
  199. },
  200. "Links": null,
  201. "PublishAllPorts": false
  202. }
  203. }
  204. :statuscode 200: no error
  205. :statuscode 404: no such container
  206. :statuscode 500: server error
  207. List processes running inside a container
  208. *****************************************
  209. .. http:get:: /containers/(id)/top
  210. List processes running inside the container ``id``
  211. **Example request**:
  212. .. sourcecode:: http
  213. GET /containers/4fa6e0f0c678/top HTTP/1.1
  214. **Example response**:
  215. .. sourcecode:: http
  216. HTTP/1.1 200 OK
  217. Content-Type: application/json
  218. {
  219. "Titles":[
  220. "USER",
  221. "PID",
  222. "%CPU",
  223. "%MEM",
  224. "VSZ",
  225. "RSS",
  226. "TTY",
  227. "STAT",
  228. "START",
  229. "TIME",
  230. "COMMAND"
  231. ],
  232. "Processes":[
  233. ["root","20147","0.0","0.1","18060","1864","pts/4","S","10:06","0:00","bash"],
  234. ["root","20271","0.0","0.0","4312","352","pts/4","S+","10:07","0:00","sleep","10"]
  235. ]
  236. }
  237. :query ps_args: ps arguments to use (eg. aux)
  238. :statuscode 200: no error
  239. :statuscode 404: no such container
  240. :statuscode 500: server error
  241. Inspect changes on a container's filesystem
  242. *******************************************
  243. .. http:get:: /containers/(id)/changes
  244. Inspect changes on container ``id`` 's filesystem
  245. **Example request**:
  246. .. sourcecode:: http
  247. GET /containers/4fa6e0f0c678/changes HTTP/1.1
  248. **Example response**:
  249. .. sourcecode:: http
  250. HTTP/1.1 200 OK
  251. Content-Type: application/json
  252. [
  253. {
  254. "Path":"/dev",
  255. "Kind":0
  256. },
  257. {
  258. "Path":"/dev/kmsg",
  259. "Kind":1
  260. },
  261. {
  262. "Path":"/test",
  263. "Kind":1
  264. }
  265. ]
  266. :statuscode 200: no error
  267. :statuscode 404: no such container
  268. :statuscode 500: server error
  269. Export a container
  270. ******************
  271. .. http:get:: /containers/(id)/export
  272. Export the contents of container ``id``
  273. **Example request**:
  274. .. sourcecode:: http
  275. GET /containers/4fa6e0f0c678/export HTTP/1.1
  276. **Example response**:
  277. .. sourcecode:: http
  278. HTTP/1.1 200 OK
  279. Content-Type: application/octet-stream
  280. {{ STREAM }}
  281. :statuscode 200: no error
  282. :statuscode 404: no such container
  283. :statuscode 500: server error
  284. Start a container
  285. *****************
  286. .. http:post:: /containers/(id)/start
  287. Start the container ``id``
  288. **Example request**:
  289. .. sourcecode:: http
  290. POST /containers/(id)/start HTTP/1.1
  291. Content-Type: application/json
  292. {
  293. "Binds":["/tmp:/tmp"],
  294. "LxcConf":{"lxc.utsname":"docker"},
  295. "PortBindings":{ "22/tcp": [{ "HostPort": "11022" }] },
  296. "PublishAllPorts":false,
  297. "Privileged":false
  298. }
  299. **Example response**:
  300. .. sourcecode:: http
  301. HTTP/1.1 204 No Content
  302. Content-Type: text/plain
  303. :jsonparam hostConfig: the container's host configuration (optional)
  304. :statuscode 204: no error
  305. :statuscode 404: no such container
  306. :statuscode 500: server error
  307. Stop a container
  308. ****************
  309. .. http:post:: /containers/(id)/stop
  310. Stop the container ``id``
  311. **Example request**:
  312. .. sourcecode:: http
  313. POST /containers/e90e34656806/stop?t=5 HTTP/1.1
  314. **Example response**:
  315. .. sourcecode:: http
  316. HTTP/1.1 204 OK
  317. :query t: number of seconds to wait before killing the container
  318. :statuscode 204: no error
  319. :statuscode 404: no such container
  320. :statuscode 500: server error
  321. Restart a container
  322. *******************
  323. .. http:post:: /containers/(id)/restart
  324. Restart the container ``id``
  325. **Example request**:
  326. .. sourcecode:: http
  327. POST /containers/e90e34656806/restart?t=5 HTTP/1.1
  328. **Example response**:
  329. .. sourcecode:: http
  330. HTTP/1.1 204 OK
  331. :query t: number of seconds to wait before killing the container
  332. :statuscode 204: no error
  333. :statuscode 404: no such container
  334. :statuscode 500: server error
  335. Kill a container
  336. ****************
  337. .. http:post:: /containers/(id)/kill
  338. Kill the container ``id``
  339. **Example request**:
  340. .. sourcecode:: http
  341. POST /containers/e90e34656806/kill HTTP/1.1
  342. **Example response**:
  343. .. sourcecode:: http
  344. HTTP/1.1 204 OK
  345. :statuscode 204: no error
  346. :statuscode 404: no such container
  347. :statuscode 500: server error
  348. Attach to a container
  349. *********************
  350. .. http:post:: /containers/(id)/attach
  351. Attach to the container ``id``
  352. **Example request**:
  353. .. sourcecode:: http
  354. POST /containers/16253994b7c4/attach?logs=1&stream=0&stdout=1 HTTP/1.1
  355. **Example response**:
  356. .. sourcecode:: http
  357. HTTP/1.1 200 OK
  358. Content-Type: application/vnd.docker.raw-stream
  359. {{ STREAM }}
  360. :query logs: 1/True/true or 0/False/false, return logs. Default false
  361. :query stream: 1/True/true or 0/False/false, return stream. Default false
  362. :query stdin: 1/True/true or 0/False/false, if stream=true, attach to stdin. Default false
  363. :query stdout: 1/True/true or 0/False/false, if logs=true, return stdout log, if stream=true, attach to stdout. Default false
  364. :query stderr: 1/True/true or 0/False/false, if logs=true, return stderr log, if stream=true, attach to stderr. Default false
  365. :statuscode 200: no error
  366. :statuscode 400: bad parameter
  367. :statuscode 404: no such container
  368. :statuscode 500: server error
  369. **Stream details**:
  370. When using the TTY setting is enabled in
  371. :http:post:`/containers/create`, the stream is the raw data
  372. from the process PTY and client's stdin. When the TTY is
  373. disabled, then the stream is multiplexed to separate stdout
  374. and stderr.
  375. The format is a **Header** and a **Payload** (frame).
  376. **HEADER**
  377. The header will contain the information on which stream write
  378. the stream (stdout or stderr). It also contain the size of
  379. the associated frame encoded on the last 4 bytes (uint32).
  380. It is encoded on the first 8 bytes like this::
  381. header := [8]byte{STREAM_TYPE, 0, 0, 0, SIZE1, SIZE2, SIZE3, SIZE4}
  382. ``STREAM_TYPE`` can be:
  383. - 0: stdin (will be writen on stdout)
  384. - 1: stdout
  385. - 2: stderr
  386. ``SIZE1, SIZE2, SIZE3, SIZE4`` are the 4 bytes of the uint32 size encoded as big endian.
  387. **PAYLOAD**
  388. The payload is the raw stream.
  389. **IMPLEMENTATION**
  390. The simplest way to implement the Attach protocol is the following:
  391. 1) Read 8 bytes
  392. 2) chose stdout or stderr depending on the first byte
  393. 3) Extract the frame size from the last 4 byets
  394. 4) Read the extracted size and output it on the correct output
  395. 5) Goto 1)
  396. Wait a container
  397. ****************
  398. .. http:post:: /containers/(id)/wait
  399. Block until container ``id`` stops, then returns the exit code
  400. **Example request**:
  401. .. sourcecode:: http
  402. POST /containers/16253994b7c4/wait HTTP/1.1
  403. **Example response**:
  404. .. sourcecode:: http
  405. HTTP/1.1 200 OK
  406. Content-Type: application/json
  407. {"StatusCode":0}
  408. :statuscode 200: no error
  409. :statuscode 404: no such container
  410. :statuscode 500: server error
  411. Remove a container
  412. *******************
  413. .. http:delete:: /containers/(id)
  414. Remove the container ``id`` from the filesystem
  415. **Example request**:
  416. .. sourcecode:: http
  417. DELETE /containers/16253994b7c4?v=1 HTTP/1.1
  418. **Example response**:
  419. .. sourcecode:: http
  420. HTTP/1.1 204 OK
  421. :query v: 1/True/true or 0/False/false, Remove the volumes associated to the container. Default false
  422. :query force: 1/True/true or 0/False/false, Removes the container even if it was running. Default false
  423. :statuscode 204: no error
  424. :statuscode 400: bad parameter
  425. :statuscode 404: no such container
  426. :statuscode 500: server error
  427. Copy files or folders from a container
  428. **************************************
  429. .. http:post:: /containers/(id)/copy
  430. Copy files or folders of container ``id``
  431. **Example request**:
  432. .. sourcecode:: http
  433. POST /containers/4fa6e0f0c678/copy HTTP/1.1
  434. Content-Type: application/json
  435. {
  436. "Resource":"test.txt"
  437. }
  438. **Example response**:
  439. .. sourcecode:: http
  440. HTTP/1.1 200 OK
  441. Content-Type: application/octet-stream
  442. {{ STREAM }}
  443. :statuscode 200: no error
  444. :statuscode 404: no such container
  445. :statuscode 500: server error
  446. 2.2 Images
  447. ----------
  448. List Images
  449. ***********
  450. .. http:get:: /images/json
  451. **Example request**:
  452. .. sourcecode:: http
  453. GET /images/json?all=0 HTTP/1.1
  454. **Example response**:
  455. .. sourcecode:: http
  456. HTTP/1.1 200 OK
  457. Content-Type: application/json
  458. [
  459. {
  460. "RepoTags": [
  461. "ubuntu:12.04",
  462. "ubuntu:precise",
  463. "ubuntu:latest"
  464. ],
  465. "Id": "8dbd9e392a964056420e5d58ca5cc376ef18e2de93b5cc90e868a1bbc8318c1c",
  466. "Created": 1365714795,
  467. "Size": 131506275,
  468. "VirtualSize": 131506275
  469. },
  470. {
  471. "RepoTags": [
  472. "ubuntu:12.10",
  473. "ubuntu:quantal"
  474. ],
  475. "ParentId": "27cf784147099545",
  476. "Id": "b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc",
  477. "Created": 1364102658,
  478. "Size": 24653,
  479. "VirtualSize": 180116135
  480. }
  481. ]
  482. Create an image
  483. ***************
  484. .. http:post:: /images/create
  485. Create an image, either by pull it from the registry or by importing it
  486. **Example request**:
  487. .. sourcecode:: http
  488. POST /images/create?fromImage=base HTTP/1.1
  489. **Example response**:
  490. .. sourcecode:: http
  491. HTTP/1.1 200 OK
  492. Content-Type: application/json
  493. {"status":"Pulling..."}
  494. {"status":"Pulling", "progress":"1 B/ 100 B", "progressDetail":{"current":1, "total":100}}
  495. {"error":"Invalid..."}
  496. ...
  497. When using this endpoint to pull an image from the registry,
  498. the ``X-Registry-Auth`` header can be used to include a
  499. base64-encoded AuthConfig object.
  500. :query fromImage: name of the image to pull
  501. :query fromSrc: source to import, - means stdin
  502. :query repo: repository
  503. :query tag: tag
  504. :query registry: the registry to pull from
  505. :reqheader X-Registry-Auth: base64-encoded AuthConfig object
  506. :statuscode 200: no error
  507. :statuscode 500: server error
  508. Insert a file in an image
  509. *************************
  510. .. http:post:: /images/(name)/insert
  511. Insert a file from ``url`` in the image ``name`` at ``path``
  512. **Example request**:
  513. .. sourcecode:: http
  514. POST /images/test/insert?path=/usr&url=myurl HTTP/1.1
  515. **Example response**:
  516. .. sourcecode:: http
  517. HTTP/1.1 200 OK
  518. Content-Type: application/json
  519. {"status":"Inserting..."}
  520. {"status":"Inserting", "progress":"1/? (n/a)", "progressDetail":{"current":1}}
  521. {"error":"Invalid..."}
  522. ...
  523. :statuscode 200: no error
  524. :statuscode 500: server error
  525. Inspect an image
  526. ****************
  527. .. http:get:: /images/(name)/json
  528. Return low-level information on the image ``name``
  529. **Example request**:
  530. .. sourcecode:: http
  531. GET /images/base/json HTTP/1.1
  532. **Example response**:
  533. .. sourcecode:: http
  534. HTTP/1.1 200 OK
  535. Content-Type: application/json
  536. {
  537. "id":"b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc",
  538. "parent":"27cf784147099545",
  539. "created":"2013-03-23T22:24:18.818426-07:00",
  540. "container":"3d67245a8d72ecf13f33dffac9f79dcdf70f75acb84d308770391510e0c23ad0",
  541. "container_config":
  542. {
  543. "Hostname":"",
  544. "User":"",
  545. "Memory":0,
  546. "MemorySwap":0,
  547. "AttachStdin":false,
  548. "AttachStdout":false,
  549. "AttachStderr":false,
  550. "PortSpecs":null,
  551. "Tty":true,
  552. "OpenStdin":true,
  553. "StdinOnce":false,
  554. "Env":null,
  555. "Cmd": ["/bin/bash"]
  556. ,"Dns":null,
  557. "Image":"base",
  558. "Volumes":null,
  559. "VolumesFrom":"",
  560. "WorkingDir":""
  561. },
  562. "Size": 6824592
  563. }
  564. :statuscode 200: no error
  565. :statuscode 404: no such image
  566. :statuscode 500: server error
  567. Get the history of an image
  568. ***************************
  569. .. http:get:: /images/(name)/history
  570. Return the history of the image ``name``
  571. **Example request**:
  572. .. sourcecode:: http
  573. GET /images/base/history HTTP/1.1
  574. **Example response**:
  575. .. sourcecode:: http
  576. HTTP/1.1 200 OK
  577. Content-Type: application/json
  578. [
  579. {
  580. "Id":"b750fe79269d",
  581. "Created":1364102658,
  582. "CreatedBy":"/bin/bash"
  583. },
  584. {
  585. "Id":"27cf78414709",
  586. "Created":1364068391,
  587. "CreatedBy":""
  588. }
  589. ]
  590. :statuscode 200: no error
  591. :statuscode 404: no such image
  592. :statuscode 500: server error
  593. Push an image on the registry
  594. *****************************
  595. .. http:post:: /images/(name)/push
  596. Push the image ``name`` on the registry
  597. **Example request**:
  598. .. sourcecode:: http
  599. POST /images/test/push HTTP/1.1
  600. **Example response**:
  601. .. sourcecode:: http
  602. HTTP/1.1 200 OK
  603. Content-Type: application/json
  604. {"status":"Pushing..."}
  605. {"status":"Pushing", "progress":"1/? (n/a)", "progressDetail":{"current":1}}}
  606. {"error":"Invalid..."}
  607. ...
  608. :query registry: the registry you wan to push, optional
  609. :reqheader X-Registry-Auth: include a base64-encoded AuthConfig object.
  610. :statuscode 200: no error
  611. :statuscode 404: no such image
  612. :statuscode 500: server error
  613. Tag an image into a repository
  614. ******************************
  615. .. http:post:: /images/(name)/tag
  616. Tag the image ``name`` into a repository
  617. **Example request**:
  618. .. sourcecode:: http
  619. POST /images/test/tag?repo=myrepo&force=0 HTTP/1.1
  620. **Example response**:
  621. .. sourcecode:: http
  622. HTTP/1.1 201 OK
  623. :query repo: The repository to tag in
  624. :query force: 1/True/true or 0/False/false, default false
  625. :statuscode 201: no error
  626. :statuscode 400: bad parameter
  627. :statuscode 404: no such image
  628. :statuscode 409: conflict
  629. :statuscode 500: server error
  630. Remove an image
  631. ***************
  632. .. http:delete:: /images/(name)
  633. Remove the image ``name`` from the filesystem
  634. **Example request**:
  635. .. sourcecode:: http
  636. DELETE /images/test HTTP/1.1
  637. **Example response**:
  638. .. sourcecode:: http
  639. HTTP/1.1 200 OK
  640. Content-type: application/json
  641. [
  642. {"Untagged":"3e2f21a89f"},
  643. {"Deleted":"3e2f21a89f"},
  644. {"Deleted":"53b4f83ac9"}
  645. ]
  646. :query force: 1/True/true or 0/False/false, default false
  647. :query noprune: 1/True/true or 0/False/false, default false
  648. :statuscode 200: no error
  649. :statuscode 404: no such image
  650. :statuscode 409: conflict
  651. :statuscode 500: server error
  652. Search images
  653. *************
  654. .. http:get:: /images/search
  655. Search for an image in the docker index.
  656. .. note::
  657. The response keys have changed from API v1.6 to reflect the JSON
  658. sent by the registry server to the docker daemon's request.
  659. **Example request**:
  660. .. sourcecode:: http
  661. GET /images/search?term=sshd HTTP/1.1
  662. **Example response**:
  663. .. sourcecode:: http
  664. HTTP/1.1 200 OK
  665. Content-Type: application/json
  666. [
  667. {
  668. "description": "",
  669. "is_official": false,
  670. "is_trusted": false,
  671. "name": "wma55/u1210sshd",
  672. "star_count": 0
  673. },
  674. {
  675. "description": "",
  676. "is_official": false,
  677. "is_trusted": false,
  678. "name": "jdswinbank/sshd",
  679. "star_count": 0
  680. },
  681. {
  682. "description": "",
  683. "is_official": false,
  684. "is_trusted": false,
  685. "name": "vgauthier/sshd",
  686. "star_count": 0
  687. }
  688. ...
  689. ]
  690. :query term: term to search
  691. :statuscode 200: no error
  692. :statuscode 500: server error
  693. 2.3 Misc
  694. --------
  695. Build an image from Dockerfile via stdin
  696. ****************************************
  697. .. http:post:: /build
  698. Build an image from Dockerfile via stdin
  699. **Example request**:
  700. .. sourcecode:: http
  701. POST /build HTTP/1.1
  702. {{ STREAM }}
  703. **Example response**:
  704. .. sourcecode:: http
  705. HTTP/1.1 200 OK
  706. Content-Type: application/json
  707. {"stream":"Step 1..."}
  708. {"stream":"..."}
  709. {"error":"Error...", "errorDetail":{"code": 123, "message": "Error..."}}
  710. The stream must be a tar archive compressed with one of the
  711. following algorithms: identity (no compression), gzip, bzip2,
  712. xz.
  713. The archive must include a file called ``Dockerfile`` at its
  714. root. It may include any number of other files, which will be
  715. accessible in the build context (See the :ref:`ADD build command
  716. <dockerbuilder>`).
  717. :query t: repository name (and optionally a tag) to be applied to the resulting image in case of success
  718. :query q: suppress verbose build output
  719. :query nocache: do not use the cache when building the image
  720. :reqheader Content-type: should be set to ``"application/tar"``.
  721. :reqheader X-Registry-Config: base64-encoded ConfigFile object
  722. :statuscode 200: no error
  723. :statuscode 500: server error
  724. Check auth configuration
  725. ************************
  726. .. http:post:: /auth
  727. Get the default username and email
  728. **Example request**:
  729. .. sourcecode:: http
  730. POST /auth HTTP/1.1
  731. Content-Type: application/json
  732. {
  733. "username":"hannibal",
  734. "password:"xxxx",
  735. "email":"hannibal@a-team.com",
  736. "serveraddress":"https://index.docker.io/v1/"
  737. }
  738. **Example response**:
  739. .. sourcecode:: http
  740. HTTP/1.1 200 OK
  741. :statuscode 200: no error
  742. :statuscode 204: no error
  743. :statuscode 500: server error
  744. Display system-wide information
  745. *******************************
  746. .. http:get:: /info
  747. Display system-wide information
  748. **Example request**:
  749. .. sourcecode:: http
  750. GET /info HTTP/1.1
  751. **Example response**:
  752. .. sourcecode:: http
  753. HTTP/1.1 200 OK
  754. Content-Type: application/json
  755. {
  756. "Containers":11,
  757. "Images":16,
  758. "Debug":false,
  759. "NFd": 11,
  760. "NGoroutines":21,
  761. "MemoryLimit":true,
  762. "SwapLimit":false,
  763. "IPv4Forwarding":true
  764. }
  765. :statuscode 200: no error
  766. :statuscode 500: server error
  767. Show the docker version information
  768. ***********************************
  769. .. http:get:: /version
  770. Show the docker version information
  771. **Example request**:
  772. .. sourcecode:: http
  773. GET /version HTTP/1.1
  774. **Example response**:
  775. .. sourcecode:: http
  776. HTTP/1.1 200 OK
  777. Content-Type: application/json
  778. {
  779. "Version":"0.2.2",
  780. "GitCommit":"5a2a5cc+CHANGES",
  781. "GoVersion":"go1.0.3"
  782. }
  783. :statuscode 200: no error
  784. :statuscode 500: server error
  785. Create a new image from a container's changes
  786. *********************************************
  787. .. http:post:: /commit
  788. Create a new image from a container's changes
  789. **Example request**:
  790. .. sourcecode:: http
  791. POST /commit?container=44c004db4b17&m=message&repo=myrepo HTTP/1.1
  792. **Example response**:
  793. .. sourcecode:: http
  794. HTTP/1.1 201 OK
  795. Content-Type: application/vnd.docker.raw-stream
  796. {"Id":"596069db4bf5"}
  797. :query container: source container
  798. :query repo: repository
  799. :query tag: tag
  800. :query m: commit message
  801. :query author: author (eg. "John Hannibal Smith <hannibal@a-team.com>")
  802. :query run: config automatically applied when the image is run. (ex: {"Cmd": ["cat", "/world"], "PortSpecs":["22"]})
  803. :statuscode 201: no error
  804. :statuscode 404: no such container
  805. :statuscode 500: server error
  806. Monitor Docker's events
  807. ***********************
  808. .. http:get:: /events
  809. Get events from docker, either in real time via streaming, or via polling (using `since`)
  810. **Example request**:
  811. .. sourcecode:: http
  812. GET /events?since=1374067924
  813. **Example response**:
  814. .. sourcecode:: http
  815. HTTP/1.1 200 OK
  816. Content-Type: application/json
  817. {"status":"create","id":"dfdf82bd3881","from":"base:latest","time":1374067924}
  818. {"status":"start","id":"dfdf82bd3881","from":"base:latest","time":1374067924}
  819. {"status":"stop","id":"dfdf82bd3881","from":"base:latest","time":1374067966}
  820. {"status":"destroy","id":"dfdf82bd3881","from":"base:latest","time":1374067970}
  821. :query since: timestamp used for polling
  822. :statuscode 200: no error
  823. :statuscode 500: server error
  824. Get a tarball containing all images and tags in a repository
  825. ************************************************************
  826. .. http:get:: /images/(name)/get
  827. Get a tarball containing all images and metadata for the repository specified by ``name``.
  828. **Example request**
  829. .. sourcecode:: http
  830. GET /images/ubuntu/get
  831. **Example response**:
  832. .. sourcecode:: http
  833. HTTP/1.1 200 OK
  834. Content-Type: application/x-tar
  835. Binary data stream
  836. :statuscode 200: no error
  837. :statuscode 500: server error
  838. Load a tarball with a set of images and tags into docker
  839. ********************************************************
  840. .. http:post:: /images/load
  841. Load a set of images and tags into the docker repository.
  842. **Example request**
  843. .. sourcecode:: http
  844. POST /images/load
  845. Tarball in body
  846. **Example response**:
  847. .. sourcecode:: http
  848. HTTP/1.1 200 OK
  849. :statuscode 200: no error
  850. :statuscode 500: server error
  851. 3. Going further
  852. ================
  853. 3.1 Inside 'docker run'
  854. -----------------------
  855. Here are the steps of 'docker run' :
  856. * Create the container
  857. * If the status code is 404, it means the image doesn't exists:
  858. * Try to pull it
  859. * Then retry to create the container
  860. * Start the container
  861. * If you are not in detached mode:
  862. * Attach to the container, using logs=1 (to have stdout and stderr from the container's start) and stream=1
  863. * If in detached mode or only stdin is attached:
  864. * Display the container's id
  865. 3.2 Hijacking
  866. -------------
  867. In this version of the API, /attach, uses hijacking to transport stdin, stdout and stderr on the same socket. This might change in the future.
  868. 3.3 CORS Requests
  869. -----------------
  870. To enable cross origin requests to the remote api add the flag "--api-enable-cors" when running docker in daemon mode.
  871. .. code-block:: bash
  872. docker -d -H="192.168.1.9:4243" --api-enable-cors