Instructions
- Clicking the Login button will redirect you to the google login page.
- You will need to login with {{ email }} to confirm your vote.
- Upon successful login, your vote will be counted and you will be taken to the gallery.
- Unlike social media platforms where you can vote any number of pictures, you can cast only one vote to one picture. {% if email ==<EMAIL_ADDRESS>%}
- Dude, please eat na. {% endif %}


Zhicong Lu, Rubaiat Habib Kazi, Li-Yi Wei, Mira Dontcheva, Karrie Karahalios
CSCW 2021
Creative live streams, where artists or designers demonstrate their creative process, have emerged as a unique and popular genre of live streams due to the real-time interactivity they afford. However, streamer-viewer interactions on most live streaming platforms only enable users to utilize text and emojis to communicate, which limits what viewers can convey and share in real time. To investigate the design space of potential visual and non-textual modalities within creative live streams, we first analyzed existing Twitch extensions and conducted a formative study with streamers who share creative activities to uncover key challenges that these streamers face. We then designed and implemented a prototype system, StreamSketch, which enables viewers and streamers to interact during live streams using multiple modalities, including freeform sketches and text. The prototype was evaluated by two professional artist streamers and their viewers during six streaming sessions. Overall, streamers and viewers found that StreamSketch provided increased engagement and new affordances compared to the traditional text-only modality, and highlighted how efficiency, moderation, and tool integration were continued challenges.


| Modifier and Type | Method and Description |
|---|---|
static Oid |
Commit.amend(Commit commitToAmend,
String updateRef,
Signature author,
Signature committer,
String messageEncoding,
String message,
Tree tree)
Amend an existing commit by replacing only non-NULL values.
|
static Oid |
Tag.annotationCreate(Repository repo,
String tagName,
GitObject target,
Signature tagger,
String message)
Create a new tag in the object database pointing to a git_object
|
Oid |
Index.checksum()
Get the checksum of the index
|
Oid |
Rebase.commit(Signature author,
Signature committer,
String messageEncoding,
String message)
Commits the current patch.
|
static Oid |
Tag.create(Repository repo,
String tagName,
GitObject target,
Signature tagger,
String message,
boolean force)
Create a new tag in the repository from an object
|
static Oid |
Commit.create(Repository repo,
String updateRef,
Signature author,
Signature committer,
String messageEncoding,
String message,
Tree tree,
List<Commit> parents)
Create new commit in the repository.
|
static Oid |
Blob.createdFromDisk(Repository repo,
String path)
Read a file from the filesystem and write its content to the Object Database as a loose blob
|
static Oid |
Blob.createFromBuffer(Repository repo,
byte[] buf)
Write an in-memory buffer to the ODB as a blob
|
Oid |
Tag.createFromBuffer(Repository repo,
String buffer,
boolean force)
Create a new tag in the repository from a buffer
|
static Oid |
Blob.createFromStreamCommit(WriteStream ws)
Close the stream and write the blob to the object db
|
static Oid |
Blob.createFromWorkdir(Repository repo,
String relativePath)
Read a file from the working folder of a repository and write it to the Object Database as a
loose blob
|
Oid |
Tag.createLightWeight(Repository repo,
String tagName,
GitObject target,
boolean force)
Create a new lightweight tag pointing at a target object
|
static Oid |
Commit.createWithSignature(Repository repo,
String commitContent,
String signature,
String signatureField)
Create a commit object from the given buffer and signature
|
Oid |
Odb.Stream.finalizeWrite()
Finish writing to an odb stream
|
Oid |
Note.CommitCreateResult.getBlob() |
Oid |
Note.CommitCreateResult.getCommit() |
Oid |
Odb.ExpandId.getOid() |
static Oid |
Odb.hash(byte[] data,
GitObject.Type type)
Determine the object-ID (sha1 hash) of a data buffer
|
static Oid |
Odb.hashfile(Path path,
GitObject.Type type)
Read a file from disk and fill a git_oid with the object id that the file would have if it
were written to the Object Database as an object of the given type (w/o applying filters).
|
Oid |
Repository.hashfile(Path path,
GitObject.Type type,
String asPath)
Calculate hash of file using repository filtering rules.
|
Oid |
GitObject.id()
Get the id (SHA1) of a repository object
|
Oid |
Reference.id() |
Oid |
Note.id() |
Oid |
OdbObject.id()
Return the OID of an ODB object
|
Oid |
Blob.id()
Get the id of a blob.
|
Oid |
AnnotatedCommit.id() |
static Oid |
Reference.nameToId(Repository repo,
String name)
Lookup a reference by name and resolve immediately to OID.
|
Oid |
Revwalk.next()
Get the next commit from the revision walk.
|
static Oid |
Oid.of(byte[] bytes) |
static Oid |
Oid.of(String hexSha) |
Oid |
Commit.parentId(int n)
git cat-file -p master | grep parent
git rev-parse master^1
git log --pretty=%P -n 1 master |
Oid |
Diff.patchid(Diff.PatchidOptions opts)
Calculate the patch ID for the given patch.
|
Oid |
Reference.target()
Get the OID pointed to by a direct reference.
|
Oid |
Tag.targetId()
Get the OID of the tagged object of a tag
|
Oid |
Reference.targetPeel()
Return the peeled OID target of this reference.
|
Oid |
Commit.treeId()
Get the id of the tree pointed to by a commit.
|
Oid |
Index.writeTree()
Write the index as a tree, roughly equals to:
|
Oid |
Index.writeTreeTo(Repository repo)
Write the index as a tree to the given repository
|
| Modifier and Type | Method and Description |
|---|---|
static Optional<Oid> |
Merge.base(Repository repo,
Oid one,
Oid two)
Find a merge base between two commits
|
static Optional<Oid> |
Merge.baseMany(Repository repo,
Oid[] inputArray)
Find a merge base given a list of commits
|
static Optional<Oid> |
Merge.baseOctopus(Repository repo,
Oid[] inputArray)
Find a merge base in preparation for an octopus merge
|
static List<Oid> |
Merge.bases(Repository repo,
Oid one,
Oid two)
Find merge bases between two commits
|
static List<Oid> |
Merge.basesMany(Repository repo,
Oid[] inputArray)
Find all merge bases given a list of commits
|
static Optional<Oid> |
Note.commitRemove(Repository repo,
Commit notesCommit,
Signature author,
Signature committer,
Oid oid)
Remove the note for an object When removing a note a new tree containing all notes sans the
note to be removed is created and a new commit pointing to that tree is also created.
|
static Optional<Oid> |
Note.create(Repository repo,
String notesRef,
Signature author,
Signature committer,
Oid oid,
String note,
boolean force)
Add a note for an object
|
Optional<Oid> |
Odb.existsPrefix(Oid shortId)
Determine if an object can be found in the object database by an abbreviated object ID.
|
Optional<Oid> |
Submodule.headId()
Get the OID for the submodule in the current HEAD tree.
|
Optional<Oid> |
Submodule.indexId()
Get the OID for the submodule in the index.
|
Optional<Oid> |
Submodule.wdId()
Get the OID for the submodule in the current working directory.
|
| Modifier and Type | Method and Description |
|---|---|
int |
Revwalk.HideCb.accept(Oid oid) |
int |
Remote.UpdateTipsCb.accept(String refname,
Oid a,
Oid b)
Callback when a reference is updated locally
|
static Optional<Oid> |
Merge.base(Repository repo,
Oid one,
Oid two)
Find a merge base between two commits
|
static Optional<Oid> |
Merge.baseMany(Repository repo,
Oid[] inputArray)
Find a merge base given a list of commits
|
static Optional<Oid> |
Merge.baseOctopus(Repository repo,
Oid[] inputArray)
Find a merge base in preparation for an octopus merge
|
static List<Oid> |
Merge.bases(Repository repo,
Oid one,
Oid two)
Find merge bases between two commits
|
static List<Oid> |
Merge.basesMany(Repository repo,
Oid[] inputArray)
Find all merge bases given a list of commits
|
abstract int |
Repository.MergeheadForeachCb.call(Oid oid)
Callback used to iterate over each MERGE_HEAD entry
|
abstract int |
Repository.FetchHeadForeachCb.call(String remoteUrl,
Oid oid,
boolean isMerge)
Callback used to iterate over each FETCH_HEAD entry
|
static Note.CommitCreateResult |
Note.commitCreate(Repository repo,
Commit parent,
Signature author,
Signature committer,
Oid oid,
String note,
boolean allowNoteOverwrite)
Add a note for an object from a commit
|
static Note |
Note.commitRead(Repository repo,
Commit notesCommit,
Oid oid)
Read the note for an object from a note commit
|
static Optional<Oid> |
Note.commitRemove(Repository repo,
Commit notesCommit,
Signature author,
Signature committer,
Oid oid)
Remove the note for an object When removing a note a new tree containing all notes sans the
note to be removed is created and a new commit pointing to that tree is also created.
|
static Reference |
Reference.create(Repository repo,
String name,
Oid oid,
boolean force,
String logMessage)
Create a new direct reference that refers directly to an Oid.
|
static Optional<Oid> |
Note.create(Repository repo,
String notesRef,
Signature author,
Signature committer,
Oid oid,
String note,
boolean force)
Add a note for an object
|
static Reference |
Reference.createMatching(Repository repo,
String name,
Oid oid,
boolean force,
Oid currentId,
String logMessage)
Conditionally create new direct reference Note: this methods is untested, use with caution
(you are welcome to contribute a test here).
|
boolean |
Odb.exists(Oid id)
Determine if the given object can be found in the object database.
|
Optional<Oid> |
Odb.existsPrefix(Oid shortId)
Determine if an object can be found in the object database by an abbreviated object ID.
|
static AnnotatedCommit |
AnnotatedCommit.fromFetchHead(Repository repo,
String branchName,
String remoteUrl,
Oid oid)
Initialize
AnnotatedCommit from FETCH_HEAD data |
void |
Revwalk.hide(Oid commitId)
Mark a commit (and its ancestors) uninteresting for the output.
|
void |
Revwalk.hide(Oid commitId,
Revwalk.HideCb callback)
Mark a commit (and its ancestors) uninteresting for the output.
|
static Commit |
Commit.lookup(Repository repo,
Oid oid)
Lookup a commit object from a repository.
|
static Tag |
Tag.lookup(Repository repo,
Oid oid) |
static Blob |
Blob.lookup(Repository repo,
Oid oid)
Lookup a blob from sha in a repository.
|
static AnnotatedCommit |
AnnotatedCommit.lookup(Repository repo,
Oid oid)
Initialize
AnnotatedCommit from Oid |
static GitObject |
GitObject.lookup(Repository repository,
Oid oid,
GitObject.Type type)
Lookup a reference to one of the objects in a repository.
|
static Commit |
Commit.lookupPrefix(Repository repo,
Oid oid)
Deprecated.
in preference to
lookup which handles if oid is short id already. |
static Tag |
Tag.lookupPrefix(Repository repo,
Oid oid)
Deprecated.
in preference to
Tag::lookup |
static Blob |
Blob.lookupPrefix(Repository repo,
Oid oid)
Lookup a blob from short sha in a repository.
|
static GitObject |
GitObject.lookupPrefix(Repository repository,
Oid oid,
int len,
GitObject.Type type)
Deprecated.
in preference to
lookup which already handles the short oid case. |
Odb.RStream |
Odb.openRstream(Oid oid)
Open a stream to read an object from the ODB
|
void |
Revwalk.push(Oid id)
Add a new root for the traversal
|
Optional<OdbObject> |
Odb.read(Oid id)
Read an object from the database.
|
static Note |
Note.read(Repository repo,
String notesRef,
Oid oid)
Read the note for an object
|
Optional<OdbObject.Header> |
Odb.readHeader(Oid id)
Read the header of an object from the database, without reading its full contents.
|
Optional<OdbObject> |
Odb.readPrefix(Oid shortId)
Read an object from the database, given a prefix of its identifier.
|
static void |
Note.remove(Repository repo,
String notesRef,
Signature author,
Signature committer,
Oid oid)
Remove the note for an object
|
void |
Repository.setHeadDetached(Oid oid)
Make the repository HEAD directly point to the Commit.
|
Reference |
Reference.setTarget(Oid oid,
String logMessage)
Conditionally create a new reference with the same name as the given reference but a
different OID target.
|
void |
Odb.write(Oid out,
byte[] data,
GitObject.Type type)
Write an object directly into the ODB
|
| Modifier and Type | Method and Description |
|---|---|
List<Odb.ExpandId> |
Odb.expandIds(List<Oid> ids)
Determine if one or more objects can be found in the object database by their abbreviated
object ID and type.
|
| Constructor and Description |
|---|
CommitCreateResult(Oid commit,
Oid blob) |
Entry(Oid oid,
Oid annotatedId) |
ExpandId(Oid oid,
OdbObject.Type type) |
Copyright © 2020. All rights reserved.


I’m a passionate full stack software developer
I moved to Nashville in the Fall 2017 to attend a coding bootcamp. This has been a goal of mine since my first real experience of studying coding with my brother-in-law 4 years ago. I had experimented as a kid with CSS and HTML and my brother-in-law reminded me how challenging and fun it could be. It sparked a passion in me to creatively solve problems through coding. I wanted to study with people who could further my knowledge and prepare me with the tools to move into a career in coding. This is why I decided to take charge of my career and attend Nashville Software School.
Here are some of my interests:
Cell:<PHONE_NUMBER>
Github: https://github.com/buffard
Email<EMAIL_ADDRESS>Linkedin: https://www.linkedin.com/in/samuel-webber-808476120/


| Branch Name | Address | Contact Person | Contact Number | Status |
|---|---|---|---|---|
| {{branch.branchName}} | {{branch.branchAddress}} | {{branch.contactPerson}} | {{branch.contactNumber}} | Active |
| Course Name | Description | Actions |
|---|---|---|
| {{course.courseName}} | {{course.description}} |
| Username | Date registered | Role | Status |
|---|---|---|---|
| Vishnu Serghei | 2012/01/01 | Member | Active |
| Zbyněk Phoibos | 2012/02/01 | Staff | Banned |
| Einar Randall | 2012/02/01 | Admin | Inactive |
| Félix Troels | 2012/03/01 | Member | Pending |
| Aulus Agmundr | 2012/01/21 | Staff | Active |


What is the relationship between mindfulness and self awareness?
Self-awareness is a type of mindfulness directed towards yourself. It is a state of clarity and attention about yourself and your emotions. As such, self-awareness is trainable.
Try at least one of the self awareness practices from the chapter (Body Scan, Journaling). What was your experience of it? How did you feel?
I tried a Body Scan practice. I feel it's quite easy to physically notice tension, stress or anxiety, as well as noticing the change when thinking about a positive emotion. I'm not sure about other emotions though, or about lack of emotions, those might be harder to notice.
What did you take away from the "My Emotions are Not Me" section?
Our emotions are not who we are, we can experience them as we would other physiological phenomena. We can recognize them and act on them.
I agree with the author of the book regarding the fact that noticing your own emotions allows you to act on them. You can soothe them by engaging the thinking part of your brain, rationalizing the events which lead to those emotions, or by experiencing other happier emotions. Noticing your emotions allows you to adjust your behaviour towards yourself and others, and to not being controlled by them.
I feel it is dangerous though to suggests that we can gain "mastery over our emotions" as this can be interpreted as controlling our emotions. Ever tried stopping to be sad? stopping to be angry? It usually doesn't work! I believe emotional awareness, noticing our emotions and aknowledging them, allows for something more powerful than control: acceptance.


External Style
p
b
This is h1
This is h2
This is h3
This is h4
This is h5
This is h6
Skills
Level
Java
3 Stars
Link:
return


Simon Cowell 'does a Coleen Rooney' to catch culprit who leaked birthday plans
The Celebrity X Factor judge is angry that invites to his 60th bash got out - and he is determined to find the person to blame
by Sam Elliott, https://www.mirror.co.uk/authors/sam-elliott/Simon Cowell is 'doing a Coleen Rooney' as he tries to track down who leaked his birthday invitations.
Simon, 60, is not at all happy that news of his big bash got out.
According to The Sun , he was due to have dinner at trendy Chelsea restaurant La Famiglia.
That was suddenly postponed but the Celebrity X Factor judge is not happy the invites were seen by people not on his 80-strong guestlist.
Now he wants to find out who has been sending them around - and he has taken inspiration from Mrs Rooney as he looks to get to the bottom of it.
She accused Rebekah Vardy, the wife of Leicester City striker Jamie, of selling stories on her in a public spat last month.
Simon will also play detective as he attempts to find the guilty party.
“No stone is being left unturned; Simon and his team are on a mission," a source said.
“Inspired by Coleen and her intrepid Wagatha Christie efforts, Simon is wading through his party list, trying to figure out possible motives: greed, publicity, desperation or revenge.
“The invites were all sent out from a secure email address, so this is being looked at, too.
"Simon can be quite the sleuth when he puts his mind to it - the culprit should be quaking in their Louboutins.”
The music mogul called his celebration off and blamed a diary clash.
The cancellation notice read: "Dear all, I am so sorry but this dinner is cancelled/postponed.
"Scheduling conflicts unfortunately are prohibiting us from having this dinner at this time.
"We will keep you posted as to when it will be rescheduled for."


Home
About me
Contact
this is the way you can contact me
you can get in touch with me
on
number:+250783853580
email:ncharlene38@gmail.com


I had a dog, name Toby. He is a Schnauzer.
These are some things that describe him
I used to have a hedgehog, his name was Phteven.
He's not like a porcupine, this is what makes hedgehogs different:


{%extends 'base.html'%} {% block content %} {{ block.super}} GALLERY ADMIN LOCATION BUGI's Gallery ☰
description
{{image.description}}
Category
{{image.category}}
location
{{image.location}}


colorize.js
red -> green
green -> red
red -> orange -> green
green -> orange -> red
rainbow
black -> white
white -> black
r2g
colorize.js
on GitHub.com


More info will follow
Link to my FB page: IrynaMaslova
something else
may be a table with entires
Linkedin
Twitter
Facebook


| File | Statements | Branches | Functions | Lines | |||||
|---|---|---|---|---|---|---|---|---|---|
| app.component.js | 88.57% | 124/140 | 64.1% | 25/39 | 76.36% | 42/55 | 89.26% | 108/121 | |
| app.store.js | 79.65% | 90/113 | 62.07% | 18/29 | 21.74% | 5/23 | 85.29% | 87/102 | |
| operators.js | 100% | 15/15 | 100% | 0/0 | 100% | 0/0 | 100% | 15/15 | |
| system-config.js | 100% | 1/1 | 100% | 0/0 | 100% | 0/0 | 100% | 1/1 |


CSS Positioning: Getting Your Absolutes and Relatives Straight
In this blog post I'll explain the possible positioning options available in CSS.
- position:static
- position:relative Specifying a relative position allows you to move the element relattive to where it would normally occur in the document, i.e. relative to its static position.
- position:absolute Specifying an absolute position removes the element from the document and allows it to be placed in an exact location on the page.
- position:absolute + relative
This is the default positioning for all elements in CSS. This means that the element has no specific directions for how to be positioned so it is placed as it would normally occur in the document.
This would generally be used if it is necessary to reset a positioning that has already been set.
#top-box { position:static; } #bottom-box { position:static }
#top-box { position: relative; top: 40px; right: -20px }
Notice in the diagram how the position of top-box has changed relative to its position in the previous example. The next element did not move because its position in the flow of the document was left unchanged.
#top-box { position: absolute; top: 1210px; right: 50px; }
The remaining elements get stacked in the order that they appear in the document. Thus the bottom-box takes the position previously held by the top-box as it is not the next element in the order of the flow of the document.
The power of the relative and absolute position features is clear when they are used together. By placing box-1a inside of box-1 and giving the latter box a relative position we are able to adjust the position of box-1a relative to the position of box-1. This is a bit counterintuitive as the box that remains in place is actually given the relative designation, but if you think that the absolute attribute removes the box from the document and positions it relative to the box designated relative it makes a bit more sense.
#box-1 { position: relative; } #box-1a { position: absolute; top: 0px; right: 200px; }
Conclusion
This covers some of the most useful position attributes. It would be useful to check out resorces for some of the ones not covered here, like the float and fixed positions.


Awesome, you got {{ selectedCard.discount }}% off your next purchase at {{ bakery.name }}
How do I redeem this awesome reward?
Option 1Visit this link when you're at the bakery.Copy to clipboardOption 2We'll send you an emailEmailOption 3Download our app to save all your discounts in one convenient place.Open in App
Score! Your friend {{friend.name}} gave you a voucher for {{ bakery.name }}
Click on one of the cards below to reveal your voucher!


 Q1 OR Q2 OR Q3 OR Q4). Specify rating referring to the website:scimagojr
ii) Journal publications -Not listed in SCImago Journal rating rank
iii)Google Impact factor of journal
iv) Conference Presentations
(b) Books published/chapter contributed with details
(c) Patent (s) filed/granted with details
(d) Details of commercialization status for the granted patents
(e) Industrial consultation (given/undertaken): provide details
(f) Please state willingness of your Institute to give partial financial support to this proposal. If yes, state percentage of the total cost that will be supported by your Institute. Include a signed letter from the head of the institute assuring the said support
(g) Highlight reasons in FIVE sentences or less, what is special, unique or novel in your project that makes it an attractive proposition
|
a)
|


|
OpenM++ compiler (omc)
|
Literal encapsulates a C++ literal or an openM++ literal. More...
Public Member Functions | |
| Literal (const string &tok) | |
| string | value () const |
Protected Attributes | |
| const string | cxx_token |
Literal encapsulates a C++ literal or an openM++ literal.
When a C++ literal is identified by the scanner it creates an instance of a sub-class of Literal which encapsulates the C++ representation of the literal as a string, and passes it to the parser. For example, a FloatingPointLiteral might encapsulate a string consisting of the 7 characters in 2.71828.
The sub-class TimeLiteral is the only literal which is not a C++ literal.


creation date
start date
end date
occurrences
new occurrences
{% for object in object_list %}
{{ object.creation_date }}
{{ object.start_time }}
{{ object.end_time }}
{{ object.get_occurrences_number }}
{{ object.get_new_occurrences_number }}
{% endfor %}


Mjolnir Countless Abilities
Indestructible, Extremely Durable, Manipulate weather, Flight at tremendous speeds, Project powerful mystical blasts of energy, Creating powerful barriers,
Detect all types of energy, Teleportation between worlds, Time travel, Manipulating time.


call psb_sp_getrow(row, a, nz, ia, ja, val, info, &
& append, nzin, lrw)
- Type:
- Asynchronous.
- On Entry
-
- row
- The (first) row to be extracted.
Scope:local
Type:required
Intent: in.
Specified as: an integer .
- a
- the matrix from which to get rows.
Scope:local
Type:required
Intent: in.
Specified as: a structured data of type spdatapsb_Tspmat_type.
- append
- Whether to append or overwrite existing output.
Scope:local
Type:optional
Intent: in.
Specified as: a logical value default: false (overwrite).
- nzin
- Input size to be appended to.
Scope:local
Type:optional
Intent: in.
Specified as: an integer . When append is true, specifies how many
entries in the output vectors are already filled.
- lrw
- The last row to be extracted.
Scope:local
Type:optional
Intent: in.
Specified as: an integer , default: .
- On Return
-
- nz
- the number of elements returned by this call.
Scope:local.
Type:required.
Intent: out.
Returned as: an integer scalar.
- ia
- the row indices.
Scope:local.
Type:required.
Intent: inout.
Specified as: an integer array with the ALLOCATABLE
attribute.
- ja
- the column indices of the elements to be inserted.
Scope:local.
Type:required.
Intent: inout.
Specified as: an integer array with the ALLOCATABLE
attribute.
- val
- the elements to be inserted.
Scope:local.
Type:required.
Intent: inout.
Specified as: a real array with the ALLOCATABLE
attribute.
- info
- Error code.
Scope: local
Type: required
Intent: out.
An integer value; 0 means no error has been detected.
Notes
- The output is always the size of the output generated by
the current call; thus, if
append=.true.
, the total output
size will be , with the newly extracted coefficients stored in
entries nzin+1:nzin+nz
of the array arguments;
- When
append=.true.
the output arrays are reallocated as
necessary;
- The row and column indices are returned in the local numbering
scheme; if the global numbering is desired, the user may employ the
psb_loc_to_glob
routine on the output.


Engine API v1.20
読む時間の目安: 47 分1. Brief introduction
- The daemon listens on
unix:///var/run/docker.sock
but you can Bind Docker to another host/port or a Unix socket. - The API tends to be REST. However, for some complex commands, like
attach
orpull
, the HTTP connection is hijacked to transportstdout
,stdin
andstderr
. - A
Content-Length
header should be present inPOST
requests to endpoints that expect a body. - To lock to a specific version of the API, you prefix the URL with the version
of the API to use. For example,
/v1.18/info
. If no version is included in the URL, the maximum supported API version is used. - If the API version specified in the URL is not supported by the daemon, a HTTP
400 Bad Request
error message is returned.
2. Endpoints
2.1 Containers
List containers
GET /containers/json
List containers
Example request:
GET /v1.20/containers/json?all=1&before=8dfafdbc3a40&size=1 HTTP/1.1
Example response:
HTTP/1.1 200 OK
Content-Type: application/json
[
{
"Id": "8dfafdbc3a40",
"Names":["/boring_feynman"],
"Image": "ubuntu:latest",
"Command": "echo 1",
"Created":<PHONE_NUMBER>,
"Status": "Exit 0",
"Ports": [{"PrivatePort": 2222, "PublicPort": 3333, "Type": "tcp"}],
"Labels": {
"com.example.vendor": "Acme",
"com.example.license": "GPL",
"com.example.version": "1.0"
},
"SizeRw": 12288,
"SizeRootFs": 0
},
{
"Id": "9cd87474be90",
"Names":["/coolName"],
"Image": "ubuntu:latest",
"Command": "echo 222222",
"Created":<PHONE_NUMBER>,
"Status": "Exit 0",
"Ports": [],
"Labels": {},
"SizeRw": 12288,
"SizeRootFs": 0
},
{
"Id": "3176a2479c92",
"Names":["/sleepy_dog"],
"Image": "ubuntu:latest",
"Command": "echo<PHONE_NUMBER>333333",
"Created":<PHONE_NUMBER>,
"Status": "Exit 0",
"Ports":[],
"Labels": {},
"SizeRw":12288,
"SizeRootFs":0
},
{
"Id": "4cb07b47f9fb",
"Names":["/running_cat"],
"Image": "ubuntu:latest",
"Command": "echo<PHONE_NUMBER>44444444444444444444444",
"Created":<PHONE_NUMBER>,
"Status": "Exit 0",
"Ports": [],
"Labels": {},
"SizeRw": 12288,
"SizeRootFs": 0
}
]
Query parameters:
- all – 1/True/true or 0/False/false, Show all containers. Only running containers are shown by default (i.e., this defaults to false)
- limit – Show
limit
last created containers, include non-running ones. - since – Show only containers created since Id, include non-running ones.
- before – Show only containers created before Id, include non-running ones.
- size – 1/True/true or 0/False/false, Show the containers sizes
- filters - a JSON encoded value of the filters (a
map[string][]string
) to process on the containers list. Available filters: exited=<int>
; -- containers with exit code of<int>
;-
status=
(created
restarting
running
paused
exited
) label=key
orlabel="key=value"
of a container label
Status codes:
- 200 – no error
- 400 – bad parameter
- 500 – server error
Create a container
POST /containers/create
Create a container
Example request:
POST /v1.20/containers/create HTTP/1.1
Content-Type: application/json
Content-Length: 12345
{
"Hostname": "",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": true,
"AttachStderr": true,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"FOO=bar",
"BAZ=quux"
],
"Cmd": [
"date"
],
"Entrypoint": null,
"Image": "ubuntu",
"Labels": {
"com.example.vendor": "Acme",
"com.example.license": "GPL",
"com.example.version": "1.0"
},
"Volumes": {
"/volumes/data": {}
},
"WorkingDir": "",
"NetworkDisabled": false,
"MacAddress": "12:34:56:78:9a:bc",
"ExposedPorts": {
"22/tcp": {}
},
"HostConfig": {
"Binds": ["/tmp:/tmp"],
"Links": ["redis3:redis"],
"LxcConf": {"lxc.utsname":"docker"},
"Memory": 0,
"MemorySwap": 0,
"CpuShares": 512,
"CpuPeriod": 100000,
"CpuQuota": 50000,
"CpusetCpus": "0,1",
"CpusetMems": "0,1",
"BlkioWeight": 300,
"MemorySwappiness": 60,
"OomKillDisable": false,
"PidMode": "",
"PortBindings": { "22/tcp": [{ "HostPort": "11022" }] },
"PublishAllPorts": false,
"Privileged": false,
"ReadonlyRootfs": false,
"Dns": ["<IP_ADDRESS>"],
"DnsSearch": [""],
"ExtraHosts": null,
"VolumesFrom": ["parent", "other:ro"],
"CapAdd": ["NET_ADMIN"],
"CapDrop": ["MKNOD"],
"GroupAdd": ["newgroup"],
"RestartPolicy": { "Name": "", "MaximumRetryCount": 0 },
"NetworkMode": "bridge",
"Devices": [],
"Ulimits": [{}],
"LogConfig": { "Type": "json-file", "Config": {} },
"SecurityOpt": [],
"CgroupParent": ""
}
}
Example response:
HTTP/1.1 201 Created
Content-Type: application/json
{
"Id":"e90e34656806",
"Warnings":[]
}
JSON parameters:
- Hostname - A string value containing the hostname to use for the container.
- Domainname - A string value containing the domain name to use for the container.
- User - A string value specifying the user inside the container.
- AttachStdin - Boolean value, attaches to
stdin
. - AttachStdout - Boolean value, attaches to
stdout
. - AttachStderr - Boolean value, attaches to
stderr
. - Tty - Boolean value, Attach standard streams to a
tty
, includingstdin
if it is not closed. - OpenStdin - Boolean value, opens
stdin
, - StdinOnce - Boolean value, close
stdin
after the 1 attached client disconnects. - Env - A list of environment variables in the form of
["VAR=value", ...]
- Labels - Adds a map of labels to a container. To specify a map:
{"key":"value", ... }
- Cmd - Command to run specified as a string or an array of strings.
- Entrypoint - Set the entry point for the container as a string or an array of strings.
- Image - A string specifying the image name to use for the container.
- Volumes - An object mapping mount point paths (strings) inside the container to empty objects.
- WorkingDir - A string specifying the working directory for commands to run in.
- NetworkDisabled - Boolean value, when true disables networking for the container
- ExposedPorts - An object mapping ports to an empty object in the form of:
"ExposedPorts": { "<port>/<tcp|udp>: {}" }
- HostConfig
- Binds – A list of bind mounts for this container. Each item is a string in one of these forms:
host-src:container-dest
to bind-mount a host path into the container. Bothhost-src
, andcontainer-dest
must be an absolute path.host-src:container-dest:ro
to make the bind mount read-only inside the container. Bothhost-src
, andcontainer-dest
must be an absolute path.
- Links - A list of links for the container. Each link entry should be
in the form of
container_name:alias
. - LxcConf - LXC specific configurations. These configurations only
work when using the
lxc
execution driver. - Memory - Memory limit in bytes.
- MemorySwap - Total memory limit (memory + swap); set
-1
to enable unlimited swap. You must use this withmemory
and make the swap value larger thanmemory
. - CpuShares - An integer value containing the container’s CPU Shares (ie. the relative weight vs other containers).
- CpuPeriod - The length of a CPU period in microseconds.
- CpuQuota - Microseconds of CPU time that the container can get in a CPU period.
- CpusetCpus - String value containing the
cgroups CpusetCpus
to use. - CpusetMems - Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only effective on NUMA systems.
- BlkioWeight - Block IO weight (relative weight) accepts a weight value between 10 and 1000.
- MemorySwappiness - Tune a container’s memory swappiness behavior. Accepts an integer between 0 and 100.
- OomKillDisable - Boolean value, whether to disable OOM Killer for the container or not.
- PidMode - Set the PID (Process) Namespace mode for the container;
"container:<name|id>"
: joins another container’s PID namespace"host"
: use the host’s PID namespace inside the container - PortBindings - A map of exposed container ports and the host port they
should map to. A JSON object in the form
{ <port>/<protocol>: [{ "HostPort": "<port>" }] }
Take note thatport
is specified as a string and not an integer value. -
PublishAllPorts - Allocates an ephemeral host port for all of a container’s exposed ports. Specified as a boolean value.
Ports are de-allocated when the container stops and allocated when the container starts. The allocated port might be changed when restarting the container.
The port is selected from the ephemeral port range that depends on the kernel. For example, on Linux the range is defined by
/proc/sys/net/ipv4/ip_local_port_range
. - Privileged - Gives the container full access to the host. Specified as a boolean value.
- ReadonlyRootfs - Mount the container’s root filesystem as read only. Specified as a boolean value.
- Dns - A list of DNS servers for the container to use.
- DnsSearch - A list of DNS search domains
- ExtraHosts - A list of hostnames/IP mappings to add to the
container’s
/etc/hosts
file. Specified in the form["hostname:IP"]
. - VolumesFrom - A list of volumes to inherit from another container.
Specified in the form
<container name>[:<ro|rw>]
- CapAdd - A list of kernel capabilities to add to the container.
- Capdrop - A list of kernel capabilities to drop from the container.
- GroupAdd - A list of additional groups that the container process will run as
- RestartPolicy – The behavior to apply when the container exits. The
value is an object with a
Name
property of either"always"
to always restart or"on-failure"
to restart only when the container exit code is non-zero. Ifon-failure
is used,MaximumRetryCount
controls the number of times to retry before giving up. The default is not to restart. (optional) An ever increasing delay (double the previous delay, starting at 100mS) is added before each restart to prevent flooding the server. - NetworkMode - Sets the networking mode for the container. Supported
values are:
bridge
,host
,none
, andcontainer:<name|id>
- Devices - A list of devices to add to the container specified as a JSON object in the
form
{ "PathOnHost": "/dev/deviceName", "PathInContainer": "/dev/deviceName", "CgroupPermissions": "mrw"}
- Ulimits - A list of ulimits to set in the container, specified as
{ "Name": <name>, "Soft": <soft limit>, "Hard": <hard limit> }
, for example:Ulimits: { "Name": "nofile", "Soft": 1024, "Hard": 2048 }
- SecurityOpt: A list of string values to customize labels for MLS systems, such as SELinux.
- LogConfig - Log configuration for the container, specified as a JSON object in the form
{ "Type": "<driver_name>", "Config": {"key1": "val1"}}
. Available types:json-file
,syslog
,journald
,gelf
,none
.json-file
logging driver. - CgroupParent - Path to
cgroups
under which the container’scgroup
is created. If the path is not absolute, the path is considered to be relative to thecgroups
path of the init process. Cgroups are created if they do not already exist.
- Binds – A list of bind mounts for this container. Each item is a string in one of these forms:
Query parameters:
- name – Assign the specified name to the container. Must
match
/?[a-zA-Z0-9_-]+
.
Status codes:
- 201 – no error
- 400 – bad parameter
- 404 – no such container
- 406 – impossible to attach (container not running)
- 409 – conflict
- 500 – server error
Inspect a container
GET /containers/(id or name)/json
Return low-level information on the container id
Example request:
GET /v1.20/containers/4fa6e0f0c678/json HTTP/1.1
Example response:
HTTP/1.1 200 OK
Content-Type: application/json
{
"AppArmorProfile": "",
"Args": [
"-c",
"exit 9"
],
"Config": {
"AttachStderr": true,
"AttachStdin": false,
"AttachStdout": true,
"Cmd": [
"/bin/sh",
"-c",
"exit 9"
],
"Domainname": "",
"Entrypoint": null,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"ExposedPorts": null,
"Hostname": "ba033ac44011",
"Image": "ubuntu",
"Labels": {
"com.example.vendor": "Acme",
"com.example.license": "GPL",
"com.example.version": "1.0"
},
"MacAddress": "",
"NetworkDisabled": false,
"OnBuild": null,
"OpenStdin": false,
"StdinOnce": false,
"Tty": false,
"User": "",
"Volumes": null,
"WorkingDir": ""
},
"Created": "2015-01-06T15:47:31.485331387Z",
"Driver": "devicemapper",
"ExecDriver": "native-0.2",
"ExecIDs": null,
"HostConfig": {
"Binds": null,
"BlkioWeight": 0,
"CapAdd": null,
"CapDrop": null,
"ContainerIDFile": "",
"CpusetCpus": "",
"CpusetMems": "",
"CpuShares": 0,
"CpuPeriod": 100000,
"Devices": [],
"Dns": null,
"DnsSearch": null,
"ExtraHosts": null,
"IpcMode": "",
"Links": null,
"LxcConf": [],
"Memory": 0,
"MemorySwap": 0,
"OomKillDisable": false,
"NetworkMode": "bridge",
"PidMode": "",
"PortBindings": {},
"Privileged": false,
"ReadonlyRootfs": false,
"PublishAllPorts": false,
"RestartPolicy": {
"MaximumRetryCount": 2,
"Name": "on-failure"
},
"LogConfig": {
"Config": null,
"Type": "json-file"
},
"SecurityOpt": null,
"VolumesFrom": null,
"Ulimits": [{}]
},
"HostnamePath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/hostname",
"HostsPath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/hosts",
"LogPath": "/var/lib/docker/containers/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b-json.log",
"Id": "ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39",
"Image": "04c5d3b7b0656168630d3ba35d8889bd0e9caafcaeb3004d2bfbc47e7c5d35d2",
"MountLabel": "",
"Name": "/boring_euclid",
"NetworkSettings": {
"Bridge": "",
"Gateway": "",
"IPAddress": "",
"IPPrefixLen": 0,
"MacAddress": "",
"PortMapping": null,
"Ports": null
},
"Path": "/bin/sh",
"ProcessLabel": "",
"ResolvConfPath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/resolv.conf",
"RestartCount": 1,
"State": {
"Error": "",
"ExitCode": 9,
"FinishedAt": "2015-01-06T15:47:32.080254511Z",
"OOMKilled": false,
"Paused": false,
"Pid": 0,
"Restarting": false,
"Running": true,
"StartedAt": "2015-01-06T15:47:32.072697474Z"
},
"Mounts": [
{
"Source": "/data",
"Destination": "/data",
"Mode": "ro,Z",
"RW": false
}
]
}
Status codes:
- 200 – no error
- 404 – no such container
- 500 – server error
List processes running inside a container
GET /containers/(id or name)/top
List processes running inside the container id
. On Unix systems this
is done by running the ps
command. This endpoint is not
supported on Windows.
Example request:
GET /v1.20/containers/4fa6e0f0c678/top HTTP/1.1
Example response:
HTTP/1.1 200 OK
Content-Type: application/json
{
"Titles" : [
"UID", "PID", "PPID", "C", "STIME", "TTY", "TIME", "CMD"
],
"Processes" : [
[
"root", "13642", "882", "0", "17:03", "pts/0", "00:00:00", "/bin/bash"
],
[
"root", "13735", "13642", "0", "17:06", "pts/0", "00:00:00", "sleep 10"
]
]
}
Example request:
GET /v1.20/containers/4fa6e0f0c678/top?ps_args=aux HTTP/1.1
Example response:
HTTP/1.1 200 OK
Content-Type: application/json
{
"Titles" : [
"USER","PID","%CPU","%MEM","VSZ","RSS","TTY","STAT","START","TIME","COMMAND"
]
"Processes" : [
[
"root","13642","0.0","0.1","18172","3184","pts/0","Ss","17:03","0:00","/bin/bash"
],
[
"root","13895","0.0","0.0","4348","692","pts/0","S+","17:15","0:00","sleep 10"
]
],
}
Query parameters:
- ps_args –
ps
arguments to use (e.g.,aux
), defaults to-ef
Status codes:
- 200 – no error
- 404 – no such container
- 500 – server error
Get container logs
GET /containers/(id or name)/logs
Get stdout
and stderr
logs from the container id
Note: This endpoint works only for containers with the
json-file
orjournald
logging drivers.
Example request:
GET /v1.20/containers/4fa6e0f0c678/logs?stderr=1&stdout=1×tamps=1&follow=1&tail=10&since=1428990821 HTTP/1.1
Example response:
HTTP/1.1 101 UPGRADED
Content-Type: application/vnd.docker.raw-stream
Connection: Upgrade
Upgrade: tcp
{{ STREAM }}
Query parameters:
- follow – 1/True/true or 0/False/false, return stream. Default
false
. - stdout – 1/True/true or 0/False/false, show
stdout
log. Defaultfalse
. - stderr – 1/True/true or 0/False/false, show
stderr
log. Defaultfalse
. - since – UNIX timestamp (integer) to filter logs. Specifying a timestamp will only output log-entries since that timestamp. Default: 0 (unfiltered)
- timestamps – 1/True/true or 0/False/false, print timestamps for
every log line. Default
false
. - tail – Output specified number of lines at the end of logs:
all
or<number>
. Default all.
Status codes:
- 101 – no error, hints proxy about hijacking
- 200 – no error, no upgrade header found
- 404 – no such container
- 500 – server error
Inspect changes on a container’s filesystem
GET /containers/(id or name)/changes
Inspect changes on container id
’s filesystem
Example request:
GET /v1.20/containers/4fa6e0f0c678/changes HTTP/1.1
Example response:
HTTP/1.1 200 OK
Content-Type: application/json
[
{
"Path": "/dev",
"Kind": 0
},
{
"Path": "/dev/kmsg",
"Kind": 1
},
{
"Path": "/test",
"Kind": 1
}
]
Values for Kind
:
0
: Modify1
: Add2
: Delete
Status codes:
- 200 – no error
- 404 – no such container
- 500 – server error
Export a container
GET /containers/(id or name)/export
Export the contents of container id
Example request:
GET /v1.20/containers/4fa6e0f0c678/export HTTP/1.1
Example response:
HTTP/1.1 200 OK
Content-Type: application/octet-stream
{{ TAR STREAM }}
Status codes:
- 200 – no error
- 404 – no such container
- 500 – server error
Get container stats based on resource usage
GET /containers/(id or name)/stats
This endpoint returns a live stream of a container’s resource usage statistics.
Example request:
GET /v1.20/containers/redis1/stats HTTP/1.1
Example response:
HTTP/1.1 200 OK
Content-Type: application/json
{
"read" : "2015-01-08T22:57:31.547920715Z",
"network" : {
"rx_dropped" : 0,
"rx_bytes" : 648,
"rx_errors" : 0,
"tx_packets" : 8,
"tx_dropped" : 0,
"rx_packets" : 8,
"tx_errors" : 0,
"tx_bytes" : 648
},
"memory_stats" : {
"stats" : {
"total_pgmajfault" : 0,
"cache" : 0,
"mapped_file" : 0,
"total_inactive_file" : 0,
"pgpgout" : 414,
"rss" : 6537216,
"total_mapped_file" : 0,
"writeback" : 0,
"unevictable" : 0,
"pgpgin" : 477,
"total_unevictable" : 0,
"pgmajfault" : 0,
"total_rss" : 6537216,
"total_rss_huge" : 6291456,
"total_writeback" : 0,
"total_inactive_anon" : 0,
"rss_huge" : 6291456,
"hierarchical_memory_limit" : 67108864,
"total_pgfault" : 964,
"total_active_file" : 0,
"active_anon" : 6537216,
"total_active_anon" : 6537216,
"total_pgpgout" : 414,
"total_cache" : 0,
"inactive_anon" : 0,
"active_file" : 0,
"pgfault" : 964,
"inactive_file" : 0,
"total_pgpgin" : 477
},
"max_usage" : 6651904,
"usage" : 6537216,
"failcnt" : 0,
"limit" : 67108864
},
"blkio_stats" : {},
"cpu_stats" : {
"cpu_usage" : {
"percpu_usage" : [
8646879,
24472255,
36438778,
30657443
],
"usage_in_usermode" : 50000000,
"total_usage" : 100215355,
"usage_in_kernelmode" : 30000000
},
"system_cpu_usage" :<PHONE_NUMBER>00000,
"throttling_data" : {"periods":0,"throttled_periods":0,"throttled_time":0}
},
"precpu_stats" : {
"cpu_usage" : {
"percpu_usage" : [
8646879,
24350896,
36438778,
30657443
],
"usage_in_usermode" : 50000000,
"total_usage" : 100093996,
"usage_in_kernelmode" : 30000000
},
"system_cpu_usage" :<PHONE_NUMBER>000,
"throttling_data" : {"periods":0,"throttled_periods":0,"throttled_time":0}
}
}
The precpu_stats
is the cpu statistic of previous read, which is used for calculating the cpu usage percent. It is not the exact copy of the cpu_stats
field.
Query parameters:
- stream – 1/True/true or 0/False/false, pull stats once then disconnect. Default
true
.
Status codes:
- 200 – no error
- 404 – no such container
- 500 – server error
Resize a container TTY
POST /containers/(id or name)/resize?h=<height>&w=<width>
Resize the TTY for container with id
. You must restart the container for the resize to take effect.
Example request:
POST /v1.20/containers/4fa6e0f0c678/resize?h=40&w=80 HTTP/1.1
Example response:
HTTP/1.1 200 OK
Content-Length: 0
Content-Type: text/plain; charset=utf-8
Query parameters:
- h – height of
tty
session - w – width
Status codes:
- 200 – no error
- 404 – No such container
- 500 – Cannot resize container
Start a container
POST /containers/(id or name)/start
Start the container id
Note: For backwards compatibility, this endpoint accepts a
HostConfig
as JSON-encoded request body. See create a container for details.
Example request:
POST /v1.20/containers/e90e34656806/start HTTP/1.1
Example response:
HTTP/1.1 204 No Content
Status codes:
- 204 – no error
- 304 – container already started
- 404 – no such container
- 500 – server error
Stop a container
POST /containers/(id or name)/stop
Stop the container id
Example request:
POST /v1.20/containers/e90e34656806/stop?t=5 HTTP/1.1
Example response:
HTTP/1.1 204 No Content
Query parameters:
- t – number of seconds to wait before killing the container
Status codes:
- 204 – no error
- 304 – container already stopped
- 404 – no such container
- 500 – server error
Restart a container
POST /containers/(id or name)/restart
Restart the container id
Example request:
POST /v1.20/containers/e90e34656806/restart?t=5 HTTP/1.1
Example response:
HTTP/1.1 204 No Content
Query parameters:
- t – number of seconds to wait before killing the container
Status codes:
- 204 – no error
- 404 – no such container
- 500 – server error
Kill a container
POST /containers/(id or name)/kill
Kill the container id
Example request:
POST /v1.20/containers/e90e34656806/kill HTTP/1.1
Example response:
HTTP/1.1 204 No Content
Query parameters:
- signal - Signal to send to the container: integer or string like
SIGINT
. When not set,SIGKILL
is assumed and the call waits for the container to exit.
Status codes:
- 204 – no error
- 404 – no such container
- 500 – server error
Rename a container
POST /containers/(id or name)/rename
Rename the container id
to a new_name
Example request:
POST /v1.20/containers/e90e34656806/rename?name=new_name HTTP/1.1
Example response:
HTTP/1.1 204 No Content
Query parameters:
- name – new name for the container
Status codes:
- 204 – no error
- 404 – no such container
- 409 - conflict name already assigned
- 500 – server error
Pause a container
POST /containers/(id or name)/pause
Pause the container id
Example request:
POST /v1.20/containers/e90e34656806/pause HTTP/1.1
Example response:
HTTP/1.1 204 No Content
Status codes:
- 204 – no error
- 404 – no such container
- 500 – server error
Unpause a container
POST /containers/(id or name)/unpause
Unpause the container id
Example request:
POST /v1.20/containers/e90e34656806/unpause HTTP/1.1
Example response:
HTTP/1.1 204 No Content
Status codes:
- 204 – no error
- 404 – no such container
- 500 – server error
Attach to a container
POST /containers/(id or name)/attach
Attach to the container id
Example request:
POST /v1.20/containers/16253994b7c4/attach?logs=1&stream=0&stdout=1 HTTP/1.1
Example response:
HTTP/1.1 101 UPGRADED
Content-Type: application/vnd.docker.raw-stream
Connection: Upgrade
Upgrade: tcp
{{ STREAM }}
Query parameters:
- logs – 1/True/true or 0/False/false, return logs. Default
false
. - stream – 1/True/true or 0/False/false, return stream.
Default
false
. - stdin – 1/True/true or 0/False/false, if
stream=true
, attach tostdin
. Defaultfalse
. - stdout – 1/True/true or 0/False/false, if
logs=true
, returnstdout
log, ifstream=true
, attach tostdout
. Defaultfalse
. - stderr – 1/True/true or 0/False/false, if
logs=true
, returnstderr
log, ifstream=true
, attach tostderr
. Defaultfalse
.
Status codes:
- 101 – no error, hints proxy about hijacking
- 200 – no error, no upgrade header found
- 400 – bad parameter
- 404 – no such container
- 500 – server error
Stream details:
When using the TTY setting is enabled in
POST /containers/create
,
the stream is the raw data from the process PTY and client’s stdin
.
When the TTY is disabled, then the stream is multiplexed to separate
stdout
and stderr
.
The format is a Header and a Payload (frame).
HEADER
The header contains the information which the stream writes (stdout
or
stderr
). It also contains the size of the associated frame encoded in the
last four bytes (uint32
).
It is encoded on the first eight bytes like this:
header := [8]byte{STREAM_TYPE, 0, 0, 0, SIZE1, SIZE2, SIZE3, SIZE4}
STREAM_TYPE
can be:
- 0:
stdin
(is written onstdout
) - 1:
stdout
- 2:
stderr
SIZE1, SIZE2, SIZE3, SIZE4
are the four bytes of
the uint32
size encoded as big endian.
PAYLOAD
The payload is the raw stream.
IMPLEMENTATION
The simplest way to implement the Attach protocol is the following:
1. Read eight bytes.
2. Choose `stdout` or `stderr` depending on the first byte.
3. Extract the frame size from the last four bytes.
4. Read the extracted size and output it on the correct output.
5. Goto 1.
Attach to a container (websocket)
GET /containers/(id or name)/attach/ws
Attach to the container id
via websocket
Implements websocket protocol handshake according to RFC 6455
Example request
GET /v1.20/containers/e90e34656806/attach/ws?logs=0&stream=1&stdin=1&stdout=1&stderr=1 HTTP/1.1
Example response
{{ STREAM }}
Query parameters:
- logs – 1/True/true or 0/False/false, return logs. Default
false
. - stream – 1/True/true or 0/False/false, return stream.
Default
false
. - stdin – 1/True/true or 0/False/false, if
stream=true
, attach tostdin
. Defaultfalse
. - stdout – 1/True/true or 0/False/false, if
logs=true
, returnstdout
log, ifstream=true
, attach tostdout
. Defaultfalse
. - stderr – 1/True/true or 0/False/false, if
logs=true
, returnstderr
log, ifstream=true
, attach tostderr
. Defaultfalse
.
Status codes:
- 200 – no error
- 400 – bad parameter
- 404 – no such container
- 500 – server error
Wait a container
POST /containers/(id or name)/wait
Block until container id
stops, then returns the exit code
Example request:
POST /v1.20/containers/16253994b7c4/wait HTTP/1.1
Example response:
HTTP/1.1 200 OK
Content-Type: application/json
{"StatusCode": 0}
Status codes:
- 200 – no error
- 404 – no such container
- 500 – server error
Remove a container
DELETE /containers/(id or name)
Remove the container id
from the filesystem
Example request:
DELETE /v1.20/containers/16253994b7c4?v=1 HTTP/1.1
Example response:
HTTP/1.1 204 No Content
Query parameters:
- v – 1/True/true or 0/False/false, Remove the volumes
associated to the container. Default
false
. - force - 1/True/true or 0/False/false, Kill then remove the container.
Default
false
. - link - 1/True/true or 0/False/false, Remove the specified
link associated to the container. Default
false
.
Status codes:
- 204 – no error
- 400 – bad parameter
- 404 – no such container
- 409 – conflict
- 500 – server error
Copy files or folders from a container
POST /containers/(id or name)/copy
Copy files or folders of container id
Deprecated in favor of the archive
endpoint below.
Example request:
POST /v1.20/containers/4fa6e0f0c678/copy HTTP/1.1
Content-Type: application/json
Content-Length: 12345
{
"Resource": "test.txt"
}
Example response:
HTTP/1.1 200 OK
Content-Type: application/x-tar
{{ TAR STREAM }}
Status codes:
- 200 – no error
- 404 – no such container
- 500 – server error
Retrieving information about files and folders in a container
HEAD /containers/(id or name)/archive
See the description of the X-Docker-Container-Path-Stat
header in the
following section.
Get an archive of a filesystem resource in a container
GET /containers/(id or name)/archive
Get a tar archive of a resource in the filesystem of container id
.
Query parameters:
-
path - resource in the container’s filesystem to archive. Required.
If not an absolute path, it is relative to the container’s root directory. The resource specified by path must exist. To assert that the resource is expected to be a directory, path should end in
/
or/.
(assuming a path separator of/
). If path ends in/.
then this indicates that only the contents of the path directory should be copied. A symlink is always resolved to its target.Note: It is not possible to copy certain system files such as resources under
/proc
,/sys
,/dev
, and mounts created by the user in the container.
Example request:
GET /v1.20/containers/8cce319429b2/archive?path=/root HTTP/1.1
Example response:
HTTP/1.1 200 OK
Content-Type: application/x-tar
X-Docker-Container-Path-Stat: eyJuYW1lIjoicm9vdCIsInNpemUiOjQwOTYsIm1vZGUiOjIxNDc0ODQwOTYsIm10aW1lIjoiMjAxNC0wMi0yN1QyMDo1MToyM1oiLCJsaW5rVGFyZ2V0IjoiIn0=
{{ TAR STREAM }}
On success, a response header X-Docker-Container-Path-Stat
will be set to a
base64-encoded JSON object containing some filesystem header information about
the archived resource. The above example value would decode to the following
JSON object (whitespace added for readability):
{
"name": "root",
"size": 4096,
"mode":<PHONE_NUMBER>,
"mtime": "2014-02-27T20:51:23Z",
"linkTarget": ""
}
A HEAD
request can also be made to this endpoint if only this information is
desired.
Status codes:
- 200 - success, returns archive of copied resource
- 400 - client error, bad parameter, details in JSON response body, one of:
- must specify path parameter (path cannot be empty)
- not a directory (path was asserted to be a directory but exists as a file)
- 404 - client error, resource not found, one of:
– no such container (container
id
does not exist)- no such file or directory (path does not exist)
- 500 - server error
Extract an archive of files or folders to a directory in a container
PUT /containers/(id or name)/archive
Upload a tar archive to be extracted to a path in the filesystem of container
id
.
Query parameters:
-
path - path to a directory in the container to extract the archive’s contents into. Required.
If not an absolute path, it is relative to the container’s root directory. The path resource must exist.
-
noOverwriteDirNonDir - If “1”, “true”, or “True” then it will be an error if unpacking the given content would cause an existing directory to be replaced with a non-directory and vice versa.
Example request:
PUT /v1.20/containers/8cce319429b2/archive?path=/vol1 HTTP/1.1
Content-Type: application/x-tar
{{ TAR STREAM }}
Example response:
HTTP/1.1 200 OK
Status codes:
- 200 – the content was extracted successfully
- 400 - client error, bad parameter, details in JSON response body, one of:
- must specify path parameter (path cannot be empty)
- not a directory (path should be a directory but exists as a file)
- unable to overwrite existing directory with non-directory (if noOverwriteDirNonDir)
- unable to overwrite existing non-directory with directory (if noOverwriteDirNonDir)
- 403 - client error, permission denied, the volume or container rootfs is marked as read-only.
- 404 - client error, resource not found, one of:
– no such container (container
id
does not exist)- no such file or directory (path resource does not exist)
- 500 – server error
2.2 Images
List Images
GET /images/json
Example request:
GET /v1.20/images/json?all=0 HTTP/1.1
Example response:
HTTP/1.1 200 OK
Content-Type: application/json
[
{
"RepoTags": [
"ubuntu:12.04",
"ubuntu:precise",
"ubuntu:latest"
],
"Id": "8dbd9e392a964056420e5d58ca5cc376ef18e2de93b5cc90e868a1bbc8318c1c",
"Created":<PHONE_NUMBER>,
"Size": 131506275,
"VirtualSize": 131506275,
"Labels": {}
},
{
"RepoTags": [
"ubuntu:12.10",
"ubuntu:quantal"
],
"ParentId": "27cf784147099545",
"Id": "b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc",
"Created":<PHONE_NUMBER>,
"Size": 24653,
"VirtualSize": 180116135,
"Labels": {
"com.example.version": "v1"
}
}
]
Example request, with digest information:
GET /v1.20/images/json?digests=1 HTTP/1.1
Example response, with digest information:
HTTP/1.1 200 OK
Content-Type: application/json
[
{
"Created":<PHONE_NUMBER>,
"Id": "4986bf8c15363d1c5d15512d5266f8777bfba4974ac56e3270e7760f6f0a8125",
"ParentId": "ea13149945cb6b1e746bf28032f02e9b5a793523481a0a18645fc77ad53c4ea2",
"RepoDigests": [
"localhost:5000/test/busybox@sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf"
],
"RepoTags": [
"localhost:5000/test/busybox:latest",
"playdate:latest"
],
"Size": 0,
"VirtualSize": 2429728,
"Labels": {}
}
]
The response shows a single image Id
associated with two repositories
(RepoTags
): localhost:5000/test/busybox
: and playdate
. A caller can use
either of the RepoTags
values localhost:5000/test/busybox:latest
or
playdate:latest
to reference the image.
You can also use RepoDigests
values to reference an image. In this response,
the array has only one reference and that is to the
localhost:5000/test/busybox
repository; the playdate
repository has no
digest. You can reference this digest using the value:
localhost:5000/test/busybox@sha256:cbbf2f9a99b47fc460d...
See the docker run
and docker build
commands for examples of digest and tag
references on the command line.
Query parameters:
- all – 1/True/true or 0/False/false, default false
- filters – a JSON encoded value of the filters (a map[string][]string) to process on the images list. Available filters:
dangling=true
label=key
orlabel="key=value"
of an image label- filter - only return images with the specified name
Build image from a Dockerfile
POST /build
Build an image from a Dockerfile
Example request:
POST /v1.20/build HTTP/1.1
Content-Type: application/x-tar
{{ TAR STREAM }}
Example response:
HTTP/1.1 200 OK
Content-Type: application/json
{"stream": "Step 1/5..."}
{"stream": "..."}
{"error": "Error...", "errorDetail": {"code": 123, "message": "Error..."}}
The input stream must be a tar
archive compressed with one of the
following algorithms: identity
(no compression), gzip
, bzip2
, xz
.
The archive must include a build instructions file, typically called
Dockerfile
at the archive’s root. The dockerfile
parameter may be
used to specify a different build instructions file. To do this, its value must be
the path to the alternate build instructions file to use.
The archive may include any number of other files, which are accessible in the build context (See the ADD build command).
The Docker daemon performs a preliminary validation of the Dockerfile
before
starting the build, and returns an error if the syntax is incorrect. After that,
each instruction is run one-by-one until the ID of the new image is output.
The build is canceled if the client drops the connection by quitting or being killed.
Query parameters:
- dockerfile - Path within the build context to the
Dockerfile
. This is ignored ifremote
is specified and points to an externalDockerfile
. - t – A name and optional tag to apply to the image in the
name:tag
format. If you omit thetag
the defaultlatest
value is assumed. - remote – A Git repository URI or HTTP/HTTPS context URI. If the
URI points to a single text file, the file’s contents are placed into
a file called
Dockerfile
and the image is built from that file. If the URI points to a tarball, the file is downloaded by the daemon and the contents therein used as the context for the build. If the URI points to a tarball and thedockerfile
parameter is also specified, there must be a file with the corresponding path inside the tarball. - q – Suppress verbose build output.
- nocache – Do not use the cache when building the image.
- pull - Attempt to pull the image even if an older image exists locally.
- rm - Remove intermediate containers after a successful build (default behavior).
- forcerm - Always remove intermediate containers (includes
rm
). - memory - Set memory limit for build.
- memswap - Total memory (memory + swap),
-1
to enable unlimited swap. - cpushares - CPU shares (relative weight).
- cpusetcpus - CPUs in which to allow execution (e.g.,
0-3
,0,1
). - cpuperiod - The length of a CPU period in microseconds.
- cpuquota - Microseconds of CPU time that the container can get in a CPU period.
Request Headers:
- Content-type – Set to
"application/x-tar"
. -
X-Registry-Config – A base64-url-safe-encoded Registry Auth Config JSON object with the following structure:
{ "docker.example.com": { "username": "janedoe", "password": "hunter2" }, "https://index.docker.io/v1/": { "username": "mobydock", "password": "conta1n3rize14" } }
This object maps the hostname of a registry to an object containing the “username” and “password” for that registry. Multiple registries may be specified as the build may be based on an image requiring authentication to pull from any arbitrary registry. Only the registry domain name (and port if not the default “443”) are required. However (for legacy reasons) the “official” Docker, Inc. hosted registry must be specified with both a “https://” prefix and a “/v1/” suffix even though Docker will prefer to use the v2 registry API.
Status codes:
- 200 – no error
- 500 – server error
Create an image
POST /images/create
Create an image either by pulling it from the registry or by importing it
Example request:
POST /v1.20/images/create?fromImage=busybox&tag=latest HTTP/1.1
Example response:
HTTP/1.1 200 OK
Content-Type: application/json
{"status": "Pulling..."}
{"status": "Pulling", "progress": "1 B/ 100 B", "progressDetail": {"current": 1, "total": 100}}
{"error": "Invalid..."}
...
When using this endpoint to pull an image from the registry, the
X-Registry-Auth
header can be used to include
a base64-encoded AuthConfig object.
Query parameters:
- fromImage – Name of the image to pull.
- fromSrc – Source to import. The value may be a URL from which the image
can be retrieved or
-
to read the image from the request body. - repo – Repository name.
- tag – Tag. If empty when pulling an image, this causes all tags for the given image to be pulled.
Request Headers:
- X-Registry-Auth – base64-encoded AuthConfig object
Status codes:
- 200 – no error
- 404 - repository does not exist or no read access
- 500 – server error
Inspect an image
GET /images/(name)/json
Return low-level information on the image name
Example request:
GET /v1.20/images/ubuntu/json HTTP/1.1
Example response:
HTTP/1.1 200 OK
Content-Type: application/json
{
"Created": "2013-03-23T22:24:18.818426-07:00",
"Container": "3d67245a8d72ecf13f33dffac9f79dcdf70f75acb84d308770391510e0c23ad0",
"ContainerConfig": {
"Hostname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": true,
"OpenStdin": true,
"StdinOnce": false,
"Env": null,
"Cmd": ["/bin/bash"],
"Dns": null,
"Image": "ubuntu",
"Labels": {
"com.example.vendor": "Acme",
"com.example.license": "GPL",
"com.example.version": "1.0"
},
"Volumes": null,
"VolumesFrom": "",
"WorkingDir": ""
},
"Id": "b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc",
"Parent": "27cf784147099545",
"Size": 6824592
}
Status codes:
- 200 – no error
- 404 – no such image
- 500 – server error
Get the history of an image
GET /images/(name)/history
Return the history of the image name
Example request:
GET /v1.20/images/ubuntu/history HTTP/1.1
Example response:
HTTP/1.1 200 OK
Content-Type: application/json
[
{
"Id": "3db9c44f45209632d6050b35958829c3a2aa256d81b9a7be45b362ff85c54710",
"Created":<PHONE_NUMBER>,
"CreatedBy": "/bin/sh -c #(nop) ADD file:eb15dbd63394e063b805a3c32ca7bf0266ef64676d5a6fab4801f2e81e2a5148 in /",
"Tags": [
"ubuntu:lucid",
"ubuntu:10.04"
],
"Size": 182964289,
"Comment": ""
},
{
"Id": "6cfa4d1f33fb861d4d114f43b25abd0ac737509268065cdfd69d544a59c85ab8",
"Created":<PHONE_NUMBER>,
"CreatedBy": "/bin/sh -c #(nop) MAINTAINER Tianon Gravi<EMAIL_ADDRESS>- mkimage-debootstrap.sh -i iproute,iputils-ping,ubuntu-minimal -t lucid.tar.xz lucid http://archive.ubuntu.com/ubuntu/",
"Tags": null,
"Size": 0,
"Comment": ""
},
{
"Id": "511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158",
"Created":<PHONE_NUMBER>,
"CreatedBy": "",
"Tags": [
"scratch12:latest",
"scratch:latest"
],
"Size": 0,
"Comment": "Imported from -"
}
]
Status codes:
- 200 – no error
- 404 – no such image
- 500 – server error
Push an image on the registry
POST /images/(name)/push
Push the image name
on the registry
Example request:
POST /v1.20/images/test/push HTTP/1.1
Example response:
HTTP/1.1 200 OK
Content-Type: application/json
{"status": "Pushing..."}
{"status": "Pushing", "progress": "1/? (n/a)", "progressDetail": {"current": 1}}}
{"error": "Invalid..."}
...
If you wish to push an image on to a private registry, that image must already have a tag
into a repository which references that registry hostname
and port
. This repository name should
then be used in the URL. This duplicates the command line’s flow.
Example request:
POST /v1.20/images/registry.acme.com:5000/test/push HTTP/1.1
Query parameters:
- tag – The tag to associate with the image on the registry. This is optional.
Request Headers:
- X-Registry-Auth – base64-encoded AuthConfig object.
Status codes:
- 200 – no error
- 404 – no such image
- 500 – server error
Tag an image into a repository
POST /images/(name)/tag
Tag the image name
into a repository
Example request:
POST /v1.20/images/test/tag?repo=myrepo&force=0&tag=v42 HTTP/1.1
Example response:
HTTP/1.1 201 Created
Query parameters:
- repo – The repository to tag in
- force – 1/True/true or 0/False/false, default false
- tag - The new tag name
Status codes:
- 201 – no error
- 400 – bad parameter
- 404 – no such image
- 409 – conflict
- 500 – server error
Remove an image
DELETE /images/(name)
Remove the image name
from the filesystem
Example request:
DELETE /v1.20/images/test HTTP/1.1
Example response:
HTTP/1.1 200 OK
Content-type: application/json
[
{"Untagged": "3e2f21a89f"},
{"Deleted": "3e2f21a89f"},
{"Deleted": "53b4f83ac9"}
]
Query parameters:
- force – 1/True/true or 0/False/false, default false
- noprune – 1/True/true or 0/False/false, default false
Status codes:
- 200 – no error
- 404 – no such image
- 409 – conflict
- 500 – server error
Search images
GET /images/search
Search for an image on Docker Hub.
Note: The response keys have changed from API v1.6 to reflect the JSON sent by the registry server to the docker daemon’s request.
Example request:
GET /v1.20/images/search?term=sshd HTTP/1.1
Example response:
HTTP/1.1 200 OK
Content-Type: application/json
[
{
"description": "",
"is_official": false,
"is_automated": false,
"name": "wma55/u1210sshd",
"star_count": 0
},
{
"description": "",
"is_official": false,
"is_automated": false,
"name": "jdswinbank/sshd",
"star_count": 0
},
{
"description": "",
"is_official": false,
"is_automated": false,
"name": "vgauthier/sshd",
"star_count": 0
}
...
]
Query parameters:
- term – term to search
Status codes:
- 200 – no error
- 500 – server error
2.3 Misc
Check auth configuration
POST /auth
Get the default username and email
Example request:
POST /v1.20/auth HTTP/1.1
Content-Type: application/json
Content-Length: 12345
{
"username": "hannibal",
"password": "xxxx",
"email"<EMAIL_ADDRESS>"serveraddress": "https://index.docker.io/v1/"
}
Example response:
HTTP/1.1 200 OK
Status codes:
- 200 – no error
- 204 – no error
- 500 – server error
Display system-wide information
GET /info
Display system-wide information
Example request:
GET /v1.20/info HTTP/1.1
Example response:
HTTP/1.1 200 OK
Content-Type: application/json
{
"Containers": 11,
"CpuCfsPeriod": true,
"CpuCfsQuota": true,
"Debug": false,
"DockerRootDir": "/var/lib/docker",
"Driver": "btrfs",
"DriverStatus": [[""]],
"ExecutionDriver": "native-0.1",
"ExperimentalBuild": false,
"HttpProxy": "http://test:test@localhost:8080",
"HttpsProxy": "https://test:test@localhost:8080",
"ID": "7TRN:IPZB:QYBB:VPBQ:UMPP:KARE:6ZNR:XE6T:7EWV:PKF4:ZOJD:TPYS",
"IPv4Forwarding": true,
"Images": 16,
"IndexServerAddress": "https://index.docker.io/v1/",
"InitPath": "/usr/bin/docker",
"InitSha1": "",
"KernelVersion": "3.12.0-1-amd64",
"Labels": [
"storage=ssd"
],
"MemTotal":<PHONE_NUMBER>,
"MemoryLimit": true,
"NCPU": 1,
"NEventsListener": 0,
"NFd": 11,
"NGoroutines": 21,
"Name": "prod-server-42",
"NoProxy": "<IP_ADDRESS>",
"OomKillDisable": true,
"OperatingSystem": "Boot2Docker",
"RegistryConfig": {
"IndexConfigs": {
"docker.io": {
"Mirrors": null,
"Name": "docker.io",
"Official": true,
"Secure": true
}
},
"InsecureRegistryCIDRs": [
"<IP_ADDRESS>/8"
]
},
"SwapLimit": false,
"SystemTime": "2015-03-10T11:11:23.730591467-07:00"
}
Status codes:
- 200 – no error
- 500 – server error
Show the docker version information
GET /version
Show the docker version information
Example request:
GET /v1.20/version HTTP/1.1
Example response:
HTTP/1.1 200 OK
Content-Type: application/json
{
"Version": "1.5.0",
"Os": "linux",
"KernelVersion": "3.18.5-tinycore64",
"GoVersion": "go1.4.1",
"GitCommit": "a8a31ef",
"Arch": "amd64",
"ApiVersion": "1.20",
"Experimental": false
}
Status codes:
- 200 – no error
- 500 – server error
Ping the docker server
GET /_ping
Ping the docker server
Example request:
GET /v1.20/_ping HTTP/1.1
Example response:
HTTP/1.1 200 OK
Content-Type: text/plain
OK
Status codes:
- 200 - no error
- 500 - server error
Create a new image from a container’s changes
POST /commit
Create a new image from a container’s changes
Example request:
POST /v1.20/commit?container=44c004db4b17&comment=message&repo=myrepo HTTP/1.1
Content-Type: application/json
Content-Length: 12345
{
"Hostname": "",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": true,
"AttachStderr": true,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": null,
"Cmd": [
"date"
],
"Mounts": [
{
"Source": "/data",
"Destination": "/data",
"Mode": "ro,Z",
"RW": false
}
],
"Labels": {
"key1": "value1",
"key2": "value2"
},
"WorkingDir": "",
"NetworkDisabled": false,
"ExposedPorts": {
"22/tcp": {}
}
}
Example response:
HTTP/1.1 201 Created
Content-Type: application/json
{"Id": "596069db4bf5"}
JSON parameters:
- config - the container’s configuration
Query parameters:
- container – source container
- repo – repository
- tag – tag
- comment – commit message
- author – author (e.g., “John Hannibal Smith<EMAIL_ADDRESS>- pause – 1/True/true or 0/False/false, whether to pause the container before committing
- changes – Dockerfile instructions to apply while committing
Status codes:
- 201 – no error
- 404 – no such container
- 500 – server error
Monitor Docker’s events
GET /events
Get container events from docker, in real time via streaming.
Docker containers report the following events:
attach, commit, copy, create, destroy, die, exec_create, exec_start, export, kill, oom, pause, rename, resize, restart, start, stop, top, unpause
Docker images report the following events:
delete, import, pull, push, tag, untag
Example request:
GET /v1.20/events?since=1374067924
Example response:
HTTP/1.1 200 OK
Content-Type: application/json
{"status": "create", "id": "dfdf82bd3881","from": "ubuntu:latest", "time":1374067924}
{"status": "start", "id": "dfdf82bd3881","from": "ubuntu:latest", "time":1374067924}
{"status": "stop", "id": "dfdf82bd3881","from": "ubuntu:latest", "time":1374067966}
{"status": "destroy", "id": "dfdf82bd3881","from": "ubuntu:latest", "time":1374067970}
Query parameters:
- since – Timestamp. Show all events created since timestamp and then stream
- until – Timestamp. Show events created until given timestamp and stop streaming
- filters – A json encoded value of the filters (a map[string][]string) to process on the event list. Available filters:
container=<string>
; -- container to filterevent=<string>
; -- event to filterimage=<string>
; -- image to filter
Status codes:
- 200 – no error
- 500 – server error
Get a tarball containing all images in a repository
GET /images/(name)/get
Get a tarball containing all images and metadata for the repository specified
by name
.
If name
is a specific name and tag (e.g. ubuntu:latest), then only that image
(and its parents) are returned. If name
is an image ID, similarly only that
image (and its parents) are returned, but with the exclusion of the
‘repositories’ file in the tarball, as there were no image names referenced.
See the image tarball format for more details.
Example request
GET /v1.20/images/ubuntu/get
Example response:
HTTP/1.1 200 OK
Content-Type: application/x-tar
Binary data stream
Status codes:
- 200 – no error
- 500 – server error
Get a tarball containing all images
GET /images/get
Get a tarball containing all images and metadata for one or more repositories.
For each value of the names
parameter: if it is a specific name and tag (e.g.
ubuntu:latest
), then only that image (and its parents) are returned; if it is
an image ID, similarly only that image (and its parents) are returned and there
would be no names referenced in the ‘repositories’ file for this image ID.
See the image tarball format for more details.
Example request
GET /v1.20/images/get?names=myname%2Fmyapp%3Alatest&names=busybox
Example response:
HTTP/1.1 200 OK
Content-Type: application/x-tar
Binary data stream
Status codes:
- 200 – no error
- 500 – server error
Load a tarball with a set of images and tags into docker
POST /images/load
Load a set of images and tags into a Docker repository. See the image tarball format for more details.
Example request
POST /v1.20/images/load
Content-Type: application/x-tar
Content-Length: 12345
Tarball in body
Example response:
HTTP/1.1 200 OK
Status codes:
- 200 – no error
- 500 – server error
Image tarball format
An image tarball contains one directory per image layer (named using its long ID), each containing these files:
VERSION
: currently1.0
- the file format versionjson
: detailed layer information, similar todocker inspect layer_id
layer.tar
: A tarfile containing the filesystem changes in this layer
The layer.tar
file contains aufs
style .wh..wh.aufs
files and directories
for storing attribute changes and deletions.
If the tarball defines a repository, the tarball should also include a repositories
file at
the root that contains a list of repository and tag names mapped to layer IDs.
{"hello-world":
{"latest": "565a9d68a73f6706862bfe8409a7f659776d4d60a8d096eb4a3cbce6999cc2a1"}
}
Exec Create
POST /containers/(id or name)/exec
Sets up an exec instance in a running container id
Example request:
POST /v1.20/containers/e90e34656806/exec HTTP/1.1
Content-Type: application/json
Content-Length: 12345
{
"AttachStdin": true,
"AttachStdout": true,
"AttachStderr": true,
"Cmd": ["sh"],
"Tty": true,
"User": "123:456"
}
Example response:
HTTP/1.1 201 Created
Content-Type: application/json
{
"Id": "f90e34656806",
"Warnings":[]
}
JSON parameters:
- AttachStdin - Boolean value, attaches to
stdin
of theexec
command. - AttachStdout - Boolean value, attaches to
stdout
of theexec
command. - AttachStderr - Boolean value, attaches to
stderr
of theexec
command. - Tty - Boolean value to allocate a pseudo-TTY.
- Cmd - Command to run specified as a string or an array of strings.
- User - A string value specifying the user, and optionally, group to run
the exec process inside the container. Format is one of:
"user"
,"user:group"
,"uid"
, or"uid:gid"
.
Status codes:
- 201 – no error
- 404 – no such container
Exec Start
POST /exec/(id)/start
Starts a previously set up exec
instance id
. If detach
is true, this API
returns after starting the exec
command. Otherwise, this API sets up an
interactive session with the exec
command.
Example request:
POST /v1.20/exec/e90e34656806/start HTTP/1.1
Content-Type: application/json
Content-Length: 12345
{
"Detach": false,
"Tty": false
}
Example response:
HTTP/1.1 200 OK
Content-Type: application/vnd.docker.raw-stream
{{ STREAM }}
JSON parameters:
- Detach - Detach from the
exec
command. - Tty - Boolean value to allocate a pseudo-TTY.
Status codes:
- 200 – no error
- 404 – no such exec instance
Stream details:
Similar to the stream behavior of POST /containers/(id or name)/attach
API
Exec Resize
POST /exec/(id)/resize
Resizes the tty
session used by the exec
command id
. The unit is number of characters.
This API is valid only if tty
was specified as part of creating and starting the exec
command.
Example request:
POST /v1.20/exec/e90e34656806/resize?h=40&w=80 HTTP/1.1
Content-Type: text/plain
Example response:
HTTP/1.1 201 Created
Content-Type: text/plain
Query parameters:
- h – height of
tty
session - w – width
Status codes:
- 201 – no error
- 404 – no such exec instance
Exec Inspect
GET /exec/(id)/json
Return low-level information about the exec
command id
.
Example request:
GET /v1.20/exec/11fb006128e8ceb3942e7c58d77750f24210e35f879dd204ac975c184b820b39/json HTTP/1.1
Example response:
HTTP/1.1 200 OK
Content-Type: plain/text
{
"ID" : "11fb006128e8ceb3942e7c58d77750f24210e35f879dd204ac975c184b820b39",
"Running" : false,
"ExitCode" : 2,
"ProcessConfig" : {
"privileged" : false,
"user" : "",
"tty" : false,
"entrypoint" : "sh",
"arguments" : [
"-c",
"exit 2"
]
},
"OpenStdin" : false,
"OpenStderr" : false,
"OpenStdout" : false,
"Container" : {
"State" : {
"Running" : true,
"Paused" : false,
"Restarting" : false,
"OOMKilled" : false,
"Pid" : 3650,
"ExitCode" : 0,
"Error" : "",
"StartedAt" : "2014-11-17T22:26:03.717657531Z",
"FinishedAt" : "0001-01-01T00:00:00Z"
},
"ID" : "8f177a186b977fb451136e0fdf182abff5599a08b3c7f6ef0d36a55aaf89634c",
"Created" : "2014-11-17T22:26:03.626304998Z",
"Path" : "date",
"Args" : [],
"Config" : {
"Hostname" : "8f177a186b97",
"Domainname" : "",
"User" : "",
"AttachStdin" : false,
"AttachStdout" : false,
"AttachStderr" : false,
"ExposedPorts" : null,
"Tty" : false,
"OpenStdin" : false,
"StdinOnce" : false,
"Env" : [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ],
"Cmd" : [
"date"
],
"Image" : "ubuntu",
"Volumes" : null,
"WorkingDir" : "",
"Entrypoint" : null,
"NetworkDisabled" : false,
"MacAddress" : "",
"OnBuild" : null,
"SecurityOpt" : null
},
"Image" : "5506de2b643be1e6febbf3b8a240760c6843244c41e12aa2f60ccbb7153d17f5",
"NetworkSettings" : {
"IPAddress" : "<IP_ADDRESS>",
"IPPrefixLen" : 16,
"MacAddress" : "02:42:ac:11:00:02",
"Gateway" : "<IP_ADDRESS>",
"Bridge" : "docker0",
"PortMapping" : null,
"Ports" : {}
},
"ResolvConfPath" : "/var/lib/docker/containers/8f177a186b977fb451136e0fdf182abff5599a08b3c7f6ef0d36a55aaf89634c/resolv.conf",
"HostnamePath" : "/var/lib/docker/containers/8f177a186b977fb451136e0fdf182abff5599a08b3c7f6ef0d36a55aaf89634c/hostname",
"HostsPath" : "/var/lib/docker/containers/8f177a186b977fb451136e0fdf182abff5599a08b3c7f6ef0d36a55aaf89634c/hosts",
"LogPath": "/var/lib/docker/containers/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b-json.log",
"Name" : "/test",
"Driver" : "aufs",
"ExecDriver" : "native-0.2",
"MountLabel" : "",
"ProcessLabel" : "",
"AppArmorProfile" : "",
"RestartCount" : 0,
"Mounts" : []
}
}
Status codes:
- 200 – no error
- 404 – no such exec instance
- 500 - server error
3. Going further
3.1 Inside docker run
As an example, the docker run
command line makes the following API calls:
-
Create the container
- If the status code is 404, it means the image doesn’t exist:
- Try to pull it.
- Then, retry to create the container.
-
Start the container.
- If you are not in detached mode:
-
Attach to the container, using
logs=1
(to havestdout
andstderr
from the container’s start) andstream=1
- If in detached mode or only
stdin
is attached, display the container’s id.
3.2 Hijacking
In this version of the API, /attach
, uses hijacking to transport stdin
,
stdout
, and stderr
on the same socket.
To hint potential proxies about connection hijacking, Docker client sends connection upgrade headers similarly to websocket.
Upgrade: tcp
Connection: Upgrade
When Docker daemon detects the Upgrade
header, it switches its status code
from 200 OK to 101 UPGRADED and resends the same headers.
3.3 CORS Requests
To set cross origin requests to the Engine API please give values to
--api-cors-header
when running Docker in daemon mode. Set * (asterisk) allows all,
default or blank means CORS disabled
$ dockerd -H="<IP_ADDRESS>:2375" --api-cors-header="http://foo.bar"


Torquay estate agent took own life after "bad day at work"
Inquest into death of 28-year-old Adam Reed heard how he left notes and messages to his partner and family
by Carl EveA Torquay estate agent took his own life after telling his partner he had had a bad day and his branch was going to "end".
An inquest at Plymouth Coroner's court into the death of Adam Reed heard how he worked for Smart Estate Agents at their branch in Torbay.
Senior coroner Ian Arrow noted that Mr Reed's partner Jason Boddy had received a call from him at around 3.40pm on the afternoon of May 29 this year, saying that he had had a "bad day at work" and that "it wasn't the end of the world but the end of Smart".
Just under an hour later he received another message from Mr Reed asking him to let him know when he was on his way to a pre-arranged get together at his mother's. Mr Boddy told his partner he had some more work to do but at 5.01pm he texted saying he was about to get into his car and head to Mr Reed's mother's house.
By 6.08pm Mr Boddy was still waiting and texted Mr Reed asking where he was, before saying he was going home to their house in Heron Way, Torquay.
The inquest heard the statement from Mr Boddy which said he drove home, went to the front door and found it locked. When he finally entered he called out but then noticed a candle was lit and in the window there was a silver envelope with Mr Reed's date of birth written on it and some notes.
Mr Boddy's statement revealed that he knew the date of birth was the password to his partner's mobile phone and he immediately "thought the worst".
He raced upstairs where he found the body of Mr Reed in the loft hatch. He called 999 but despite attempts by paramedics to revive him he was confirmed deceased at the scene.
A post mortem concluded that Mr Reed's cause of death was suspension by ligature. A toxicology reported noted he had a very small amount of cannabis in his system.
A statement from his GP, Dr Hiley, noted that Mr Reed had suffered a viral infection earlier this year. His doctor also confirmed that in September 2010 he had made an attempt on his own life by taking an overdose of drugs.
Det Con Matthew Brett of Torquay CID said Mr Reed's phone revealed a number of notes addressed to family members which were clearly intended to be read after his death.
Reach Out
Plymouth Live's Reach Out campaign aims to raise awareness of mental health issues in men.
With suicide the biggest killer of men under 45, more has to be done to help people in need.
By shining a spotlight on these issues, we hope to encourage men struggling with mental health issues to seek help.
It’s now we need to Reach Out to those men - and we all need to help men feel that they can Reach Out, too.
A packet of cigarettes was found near an ashtray which held cannabis ash which led him to believe that Mr Reed had written his messages, smoked a single joint and going into the loft space to take his own life.
Mr Arrow noted that the estate agents in Torbay was closed which Det Con Brett confirmed.
Taking into account the evidence provided, Mr Arrow said he concluded that Mr Reed took his own life. He offered his condolences to Mr Reed's partner and family, adding that his death "must've come as a very great shock to them all".
On the Smart Estate Agent website for Torbay a message on the homepage still: "It is with saddest regret that we announce the Smart Estate Agent franchise in Torquay, Smart Estate Agent Torbay LTD, will be closed until further notice following recent events."
Devon Live sought a comment from Smart Estate Agent's base in Exeter but they declined to comment.
If you need support for mental health issues
If you need confidential support call the Samaritans on 116123 or visit a local Samaritans branch, see www.samaritans.org for details
Young people can call Papyrus 0800 068 4141 or text 07786 209697
For young people - Mind Your Way www.mindyourway.co.uk
Outlook South West www.outlooksw.co.uk


I am Nathan Ng'ethe, a student at Moringa School learning how to make his first lines of code. I completed high school last year from AHS. I come from Nyeri where my parents are in the farming industry. I have one brother who is currently in high school. I hope to join UoN and hopefully find my niche in life.
The world is advancing at a super-fast rate and most of these advancements are tech-based in one way or the other. This is why I see coding as a key component in the future and anyone who will not know some programming will be highly disadvantaged. Furthermore, coding is fun and it lets you be as creative as you can be.
Currently, I have no job experience and that is why I joined Moringa so that I can get some experience on how the job environment feels like. I hope that I can get some job experience at the end of the program and get to learn how to run my own company in the future.


Go to the source code of this file.
Typedefs | |
| typedef struct le_hashmap * | le_hashmap_Ref_t |
| typedef struct le_hashmap_It * | le_hashmap_It_Ref_t |
| typedef size_t(* | le_hashmap_HashFunc_t) (const void *keyToHashPtr) |
| typedef bool(* | le_hashmap_EqualsFunc_t) (const void *firstKeyPtr, const void *secondKeyPtr) |
| typedef bool(* | le_hashmap_ForEachHandler_t) (const void *keyPtr, const void *valuePtr, void *contextPtr) |
Legato HashMap API include file.
Copyright (C) Sierra Wireless Inc. Use of this work is subject to license.
| typedef bool(* le_hashmap_EqualsFunc_t) (const void *firstKeyPtr, const void *secondKeyPtr) |
Prototype for equality functions. The equality function returns true if the the keys point to values are equivalent. The HashMap doesn't know in advance which types are to be stored so this function must be supplied by the caller.
| firstKeyPtr | Pointer to the first key for comparing. |
| secondKeyPtr | Pointer to the second key for comparing. |
| typedef bool(* le_hashmap_ForEachHandler_t) (const void *keyPtr, const void *valuePtr, void *contextPtr) |
Prototype for callback functions for the iterator function le_hashmap_ForEach(). This function should return true in order to continue iterating, or false to stop.
| keyPtr | Pointer to the key at the current position in the map |
| valuePtr | Pointer to the value associated to this key |
| contextPtr | Pointer to the context supplied to le_hashmap_ForEach() |
| typedef size_t(* le_hashmap_HashFunc_t) (const void *keyToHashPtr) |
Prototype for hash functions. The hash function must generate a good spread of hashes without consuming lots of processing power.
| keyToHashPtr | Pointer to the key which will be hashed |
| typedef struct le_hashmap_It* le_hashmap_It_Ref_t |
Reference to a HashMap Iterator.
| typedef struct le_hashmap* le_hashmap_Ref_t |
Reference to a HashMap.
| bool le_hashmap_ContainsKey | ( | le_hashmap_Ref_t | mapRef, |
| const void * | keyPtr | ||
| ) |
Tests if the HashMap contains a particular key.
| [in] | mapRef | Reference to the map. |
| [in] | keyPtr | Pointer to the key to be searched. |
| size_t le_hashmap_CountCollisions | ( | le_hashmap_Ref_t | mapRef | ) |
Counts the total number of collisions in the map. A collision occurs when more than one entry is stored in the map at the same index.
| [in] | mapRef | Reference to the map. |
| le_hashmap_Ref_t le_hashmap_Create | ( | const char * | nameStr, |
| size_t | capacity, | ||
| le_hashmap_HashFunc_t | hashFunc, | ||
| le_hashmap_EqualsFunc_t | equalsFunc | ||
| ) |
Create a HashMap.
If you create a hashmap with a smaller capacity than you actually use, then the map will continue to work, but performance will degrade the more you put in the map.
| [in] | nameStr | Name of the HashMap |
| [in] | capacity | Size of the hashmap |
| [in] | hashFunc | Hash function |
| [in] | equalsFunc | Equality function |
| void le_hashmap_EnableTrace | ( | le_hashmap_Ref_t | mapRef | ) |
Immediately enables tracing on a particular hashmap object.
| [in] | mapRef | Reference to the map. |
| bool le_hashmap_EqualsString | ( | const void * | firstStringPtr, |
| const void * | secondStringPtr | ||
| ) |
String equality function. Can be used as a parameter to le_hashmap_Create() if the key to the table is a string
| [in] | firstStringPtr | Pointer to the first string for comparing. |
| [in] | secondStringPtr | Pointer to the second string for comparing. |
| bool le_hashmap_EqualsUInt32 | ( | const void * | firstIntPtr, |
| const void * | secondIntPtr | ||
| ) |
Integer equality function. Can be used as a parameter to le_hashmap_Create() if the key to the table is a uint32_t.
| [in] | firstIntPtr | Pointer to the first integer for comparing. |
| [in] | secondIntPtr | Pointer to the second integer for comparing. |
| bool le_hashmap_EqualsVoidPointer | ( | const void * | firstVoidPtr, |
| const void * | secondVoidPtr | ||
| ) |
Pointer equality function. Can be used as a parameter to le_hashmap_Create() if the key to the table is an pointer or reference.
| [in] | firstVoidPtr | First pointer for comparing. |
| [in] | secondVoidPtr | Second pointer for comparing. |
| void le_hashmap_ForEach | ( | le_hashmap_Ref_t | mapRef, |
| le_hashmap_ForEachHandler_t | forEachFn, | ||
| void * | contextPtr | ||
| ) |
Iterates over the whole map, calling the supplied callback with each key-value pair. If the callback returns false for any key then this function will return.
| [in] | mapRef | Reference to the map. |
| [in] | forEachFn | Callback function to be called with each pair. |
| [in] | contextPtr | Pointer to a context to be supplied to the callback. |
| void* le_hashmap_Get | ( | le_hashmap_Ref_t | mapRef, |
| const void * | keyPtr | ||
| ) |
Retrieve a value from a HashMap.
| [in] | mapRef | Reference to the map. |
| [in] | keyPtr | Pointer to the key to be retrieved. |
| le_result_t le_hashmap_GetFirstNode | ( | le_hashmap_Ref_t | mapRef, |
| void ** | firstKeyPtr, | ||
| void ** | firstValuePtr | ||
| ) |
Retrieves the key and value of the first node stored in the hashmap. The hashmap is not sorted so this will simply return the first node stored in the map. There is no guarantee that a subsequent call to this function will return the same pair if new keys have been added to the map. If NULL is passed as the firstValuePointer then only the key will be returned.
| [in] | mapRef | Reference to the map |
| [out] | firstKeyPtr | Pointer to the first key |
| [out] | firstValuePtr | Pointer to the first value |
| le_hashmap_It_Ref_t le_hashmap_GetIterator | ( | le_hashmap_Ref_t | mapRef | ) |
Gets an iterator for step-by-step iteration over the map. In this mode, the iteration is controlled by the calling function using the le_hashmap_NextNode() function. There is one iterator per map, and calling this function resets the iterator position to the start of the map. The iterator is not ready for data access until le_hashmap_NextNode() has been called at least once.
| [in] | mapRef | Reference to the map. |
| void const* le_hashmap_GetKey | ( | le_hashmap_It_Ref_t | iteratorRef | ) |
Retrieves a pointer to the key where the iterator is currently pointing. If the iterator has just been initialized and le_hashmap_NextNode() has not been called, or if the iterator has been invalidated, this will return NULL.
| [in] | iteratorRef | Reference to the iterator. |
| le_result_t le_hashmap_GetNodeAfter | ( | le_hashmap_Ref_t | mapRef, |
| const void * | keyPtr, | ||
| void ** | nextKeyPtr, | ||
| void ** | nextValuePtr | ||
| ) |
Retrieves the key and value of the node after the passed in key. The hashmap is not sorted so this will simply return the next node stored in the map. There is no guarantee that a subsequent call to this function will return the same pair if new keys have been added to the map. If NULL is passed as the nextValuePtr then only the key will be returned.
| [in] | mapRef | Reference to the map |
| [in] | keyPtr | Pointer to the key to be searched for |
| [out] | nextKeyPtr | Pointer to the first key |
| [out] | nextValuePtr | Pointer to the first value |
| void* le_hashmap_GetStoredKey | ( | le_hashmap_Ref_t | mapRef, |
| const void * | keyPtr | ||
| ) |
Retrieve a stored key from a HashMap.
| [in] | mapRef | Reference to the map. |
| [in] | keyPtr | Pointer to the key to be retrieved. |
| void const* le_hashmap_GetValue | ( | le_hashmap_It_Ref_t | iteratorRef | ) |
Retrieves a pointer to the value where the iterator is currently pointing. If the iterator has just been initialized and le_hashmap_NextNode() has not been called, or if the iterator has been invalidated, this will return NULL.
| [in] | iteratorRef | Reference to the iterator. |
| size_t le_hashmap_HashString | ( | const void * | stringToHashPtr | ) |
String hashing function. Can be used as a parameter to le_hashmap_Create() if the key to the table is a string.
| [in] | stringToHashPtr | Pointer to the string to be hashed. |
| size_t le_hashmap_HashUInt32 | ( | const void * | intToHashPtr | ) |
Integer hashing function. Can be used as a parameter to le_hashmap_Create() if the key to the table is a uint32_t.
| [in] | intToHashPtr | Pointer to the integer to be hashed. |
| size_t le_hashmap_HashVoidPointer | ( | const void * | voidToHashPtr | ) |
Pointer hashing function. Can be used as a parameter to le_hashmap_Create() if the key to the table is an pointer or reference. Simply pass in the address as the key.
| [in] | voidToHashPtr | Pointer to be hashed |
| bool le_hashmap_isEmpty | ( | le_hashmap_Ref_t | mapRef | ) |
Tests if the HashMap is empty (i.e. contains zero keys).
| [in] | mapRef | Reference to the map. |
| void le_hashmap_MakeTraceable | ( | le_hashmap_Ref_t | mapRef | ) |
Makes a particular hashmap traceable without enabling the tracing. After this is called, when the trace keyword for this hashmap (the hashmap's name) is enabled for the "framework" component in the process, tracing will start. If that keyword was enabled before this function was called, tracing will start immediately when it is called.
| [in] | mapRef | Reference to the map. |
| le_result_t le_hashmap_NextNode | ( | le_hashmap_It_Ref_t | iteratorRef | ) |
Moves the iterator to the next key/value pair in the map. Order is dependent on the hash algorithm and the order of inserts, and is not sorted at all.
| [in] | iteratorRef | Reference to the iterator. |
| le_result_t le_hashmap_PrevNode | ( | le_hashmap_It_Ref_t | iteratorRef | ) |
Moves the iterator to the previous key/value pair in the map. Order is dependent on the hash algorithm and the order of inserts, and is not sorted at all.
| [in] | iteratorRef | Reference to the iterator |
| void* le_hashmap_Put | ( | le_hashmap_Ref_t | mapRef, |
| const void * | keyPtr, | ||
| const void * | valuePtr | ||
| ) |
Add a key-value pair to a HashMap. If the key already exists in the map, the previous value will be replaced with the new value passed into this function.
| [in] | mapRef | Reference to the map. |
| [in] | keyPtr | Pointer to the key to be stored. |
| [in] | valuePtr | Pointer to the value to be stored. |
| void* le_hashmap_Remove | ( | le_hashmap_Ref_t | mapRef, |
| const void * | keyPtr | ||
| ) |
Remove a value from a HashMap.
| [in] | mapRef | Reference to the map. |
| [in] | keyPtr | Pointer to the key to be removed. |
| void le_hashmap_RemoveAll | ( | le_hashmap_Ref_t | mapRef | ) |
Deletes all the entries held in the hashmap. This will not delete the data pointed to by the key and value pointers. That cleanup is the responsibility of the caller. This allows the map to be re-used. Currently maps can't be deleted.
| [in] | mapRef | Reference to the map. |
| size_t le_hashmap_Size | ( | le_hashmap_Ref_t | mapRef | ) |
Calculates the number of keys in the HashMap.
| [in] | mapRef | Reference to the map. |


Example of date formatted for screenreaders.
The date is
A screenreader should read the above sentance as "The date is Friday, April seventh, two zero one seven."
This is done by adding an aria-label attribute to the time tag.
Usage.
- You must use a 'time' element
- Date must be in ISO format. Eg. 2017-04-07 for April 7th, 2017
- Date must be in a 'datetime' attribute
The following code:
Is changed to:
Limitations/Potential features
- No configuration, it does what it does.
- Applies the aria-label to all time elements with a datetime attribute automatically. You cant choose which elements are included.
- Doesn't handle time (hours, minutes & seconds).
- Always adds the week day, you cant turn this of.


main.formObjects
Classes
Aerobic
Athlete
Document_Creator
FitnessTest
FMS
HeartBeatFileReader
IBSSN
ParQ
personalityTest
YBalance


--- layout: post title: Calories in Southern Comfort categories: [] tags: - booze - health - nutrition status: publish type: post published: true meta: _original_post_id: '' _original_import_author: John Duprey author: ---
For those that track calories and LOVE SoCo here is the official word on carbs and cals for their 70 and 100 proof liquor...
Thank you for visiting our website and for your interest in Southern Comfort.
A 1-ounce serving of 70 proof Southern Comfort contains 2.7 grams of carbohydrates and 65 calories. A 1-ounce serving of 100 proof Southern Comfort contains 3.4 grams of carbohydrates and 95 calories. Southern Comfort contains no fats, sulfites, or gluten. I hope this information helps.
Thanks again for writing. If you have any more questions, feel free to write again. We're always happy to hear from our friends.
Best regards,
Darrell
Enjoy with care. Drink Responsibly.