Compare commits

...

679 Commits

Author SHA1 Message Date
Michael Crosby fb99f992c0 Bump to version v0.11.1
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-05-07 17:29:56 -07:00
Michael Crosby 6640f46f0e Merge branch 'master' into bump_v0.11.1
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-05-07 17:27:57 -07:00
Guillaume J. Charmes ed00ba84ac Merge pull request #5667 from bitness/typo-fix
Fix error name typo (ErrInvalidWorikingDirectory)
2014-05-07 16:53:08 -07:00
Guillaume J. Charmes c7712b350a Merge pull request #5665 from vieux/fix_auth_issue
Fix auth issue
2014-05-07 16:36:07 -07:00
Lars R. Damerow d3150e0927 Fix error name typo (ErrInvalidWorikingDirectory)
Docker-DCO-1.1-Signed-off-by: Lars R. Damerow <lars@grandstreet.us> (github: bitness)
2014-05-07 16:28:51 -07:00
Victor Vieux 2aff119baa Revert "refactor build job to know only configFile"
This reverts commit b9731bccf2.

Conflicts:
	server/server.go

Docker-DCO-1.1-Signed-off-by: Victor Vieux <vieux@docker.com> (github: vieux)
2014-05-07 22:59:13 +00:00
Victor Vieux 331e77f9ed Revert "rename configFile to auth in the job"
This reverts commit e9c3e39743.

Docker-DCO-1.1-Signed-off-by: Victor Vieux <vieux@docker.com> (github: vieux)
2014-05-07 22:58:09 +00:00
Michael Crosby 93f5d539fe Merge pull request #5660 from crosbymichael/merge_release_v0.11.0
Merge release to master v0.11.0
2014-05-07 11:42:49 -07:00
Michael Crosby 1ed63f1d16 Change version to v0.11.0-dev
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-05-07 11:38:02 -07:00
Michael Crosby b68e0078c2 Merge branch 'release' into merge_release_v0.11.0
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-05-07 11:37:32 -07:00
Michael Crosby 57aa2f2ef4 Merge pull request #5640 from crosbymichael/bump_v0.11.0
Bump version to v0.11.0
2014-05-07 11:35:20 -07:00
Michael Crosby 15209c380c Bump version to v0.11.0
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-05-07 09:59:55 -07:00
Tianon Gravi ddd0470ed1 Merge pull request #5642 from jmccrohan/master
Update mkimage-debootstrap "ubuntuLatestLTS" to "trusty"
2014-05-07 09:45:22 -06:00
Jonathan McCrohan 9e64a4d862 mkimage-debootstrap: set ubuntuLatestLTS as Trusty
Ubuntu 14.04 LTS (Trusty Tahr) was released on Thu, 17 Apr 2014; Update
ubuntuLatestLTS accordingly.

Docker-DCO-1.1-Signed-off-by: Jonathan McCrohan <jmccrohan@gmail.com> (github: jmccrohan)
2014-05-07 08:26:24 +01:00
Sven Dowideit bd9b27fe18 Merge pull request #5634 from vieux/improve_mflag_usage
Add support for \n in usages
2014-05-07 13:53:04 +10:00
Victor Vieux 275faf06e8 Merge pull request #4 from SvenDowideit/improve_mflag_usage_docs
update the docs for the new \n rendering
2014-05-06 19:54:47 -07:00
Michael Crosby 263d134fff Merge branch 'master' into bump_v0.11.0
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-05-06 18:03:23 -07:00
Victor Vieux 41b2874b99 Merge pull request #5643 from crosbymichael/fix-native-pid
Set container pid for process in native driver
2014-05-06 18:02:55 -07:00
Michael Crosby 62e8ddb579 Set container pid for process in native driver
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-05-06 17:04:04 -07:00
Sven Dowideit cfb232cff2 update the docs to reflect the nice \n handling
Docker-DCO-1.1-Signed-off-by: Sven Dowideit <SvenDowideit@fosiki.com> (github: SvenDowideit)
2014-05-07 09:40:49 +10:00
Victor Vieux b622da3cfe improve some usages
Docker-DCO-1.1-Signed-off-by: Victor Vieux <vieux@docker.com> (github: vieux)
2014-05-06 21:32:12 +00:00
Victor Vieux 77098d5b5b use tabwriter to display usage in mflag
Docker-DCO-1.1-Signed-off-by: Victor Vieux <vieux@docker.com> (github: vieux)
2014-05-06 21:31:21 +00:00
Sven Dowideit d7166536e7 Merge pull request #5622 from SvenDowideit/net-host-docs
Update the run --net cli help to include the 'host' option
2014-05-07 07:11:41 +10:00
Michael Crosby 5c12a27838 Merge pull request #5631 from vmarmol/cpuacct-usage
Export cpuacct CPU usage in total cores over the sampled period.
2014-05-06 11:47:55 -07:00
Victor Vieux 8d07c2d1ae Fix logo in README.md 2014-05-06 11:39:11 -07:00
Victor Marmol 543e60eb60 Export cpuacct CPU usage in total cores over the sampled period.
Docker-DCO-1.1-Signed-off-by: Victor Marmol <vmarmol@google.com> (github: vmarmol)
2014-05-06 16:56:39 +00:00
Michael Crosby 818648ff9f Merge pull request #5630 from rjnagal/libcontainer-fixes
Check supplied hostname before using it.
2014-05-06 09:49:52 -07:00
Michael Crosby 7e3a1b6521 Merge pull request #5629 from vmarmol/fix-systemd-softlimit
Remove support for MemoryReservation in systemd systems.
2014-05-06 09:48:33 -07:00
Michael Crosby d16fcc628e Merge pull request #5627 from cyphar/integration-cli-fixes
Fixed completely broken integration-cli tests
2014-05-06 09:35:30 -07:00
Michael Crosby 5034b658e3 Merge pull request #5626 from cyphar/networkfs-etchosts-tests
Fixed broken tests for pkg/networkfs/etchosts
2014-05-06 09:31:06 -07:00
Victor Marmol 69d43b2674 Remove support for MemoryReservation in systemd systems. This has been
deperecated since systemd 208.

Docker-DCO-1.1-Signed-off-by: Victor Marmol <vmarmol@google.com> (github: vmarmol)
2014-05-06 15:53:38 +00:00
cyphar 924979259e integration-cli: docker_cli_links: fixed broken tests
The tests weren't ... tested when last edited, this patch fixes
them so that they run and pass correctly.

Docker-DCO-1.1-Signed-off-by: Aleksa Sarai <cyphar@cyphar.com> (github: cyphar)
2014-05-07 01:05:15 +10:00
cyphar 14f65ab83b pkg: networkfs: etchosts: fixed tests
This patch fixes the fact that the tests for pkg/networkfs/etchosts
couldn't build due to syntax errors.

Docker-DCO-1.1-Signed-off-by: Aleksa Sarai <cyphar@cyphar.com> (github: cyphar)
2014-05-07 00:42:22 +10:00
O.S. Tezer ba6a732357 Merge pull request #5616 from nirvdrum/patch-2
Use the contraction for "it is."
2014-05-06 11:33:41 +01:00
Sven Dowideit 9eeff6d099 Update the run --net cli help to include the 'host' option
and then add that to the run and cli docs

Docker-DCO-1.1-Signed-off-by: Sven Dowideit <SvenDowideit@fosiki.com> (github: SvenDowideit)
2014-05-06 20:26:44 +10:00
Solomon Hykes 95d81dada6 Merge pull request #5056 by Bryan Murphy <bmurphy1976@gmail.com>
"add linked containers to hosts file"
2014-05-05 20:04:01 -07:00
Solomon Hykes dc605c8be7 Simplify integration test for link + hostname.
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-05-05 19:51:47 -07:00
Bryan Murphy 53f38a14cd add linked containers to hosts file
Docker-DCO-1.1-Signed-off-by: Bryan Murphy <bmurphy1976@gmail.com> (github: bmurphy1976)

Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
Tested-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-05-05 19:40:27 -07:00
Michael Crosby cd81895091 Add alex as devmapper and btrfs maintainer
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-05-05 19:40:27 -07:00
Guillaume J. Charmes 839b06b121 Merge pull request #5601 from crosbymichael/alex-maintainer
Add alex as devmapper and btrfs maintainer
2014-05-05 17:10:05 -07:00
Kevin Menard 2b0f88383a Use the correct "it's." 2014-05-05 20:08:35 -04:00
Guillaume J. Charmes affacfab08 Merge pull request #5614 from crosbymichael/move-attach-to-daemon
Move Attach from container to daemon
2014-05-05 16:56:11 -07:00
Michael Crosby 41cfaa738c Move Attach from container to daemon
This moves the Attach method from the container to the daemon.  This
method mostly supports the http attach logic and does not have anything
to do with the running of a container.
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-05-05 16:48:56 -07:00
Victor Vieux b4ac4228f5 Merge pull request #5613 from vieux/better_error_handling
propagate errors write
2014-05-05 16:28:15 -07:00
Victor Vieux 55f3e72d7f propagate errors write
Docker-DCO-1.1-Signed-off-by: Victor Vieux <vieux@docker.com> (github: vieux)
2014-05-05 23:23:14 +00:00
Guillaume J. Charmes 0b15944cb0 Merge pull request #5354 from alexlarsson/cgroups-systemd-fixes
cgroups: Update systemd to match fs backend
2014-05-05 16:00:56 -07:00
Sven Dowideit df5827dd02 Merge pull request #5597 from jamtur01/docs-simplify-osx-install
Fixed the horrible OSX installation docs
2014-05-06 08:55:14 +10:00
Victor Vieux 0736eb6d16 Merge pull request #5609 from crosbymichael/move-env-gen 2014-05-05 15:52:47 -07:00
Michael Crosby ab58dd5a44 Merge pull request #5611 from vieux/networkfs_pkgs
add 2 networkfs pkgs
2014-05-05 15:52:14 -07:00
Victor Vieux 3744452ecf add resolvconf
Docker-DCO-1.1-Signed-off-by: Victor Vieux <vieux@docker.com> (github: vieux)
2014-05-05 22:55:32 +00:00
Victor Vieux a1a029f6d7 add etchosts
Docker-DCO-1.1-Signed-off-by: Victor Vieux <vieux@docker.com> (github: vieux)
2014-05-05 22:43:38 +00:00
Victor Vieux eadf004fcb Merge pull request #5600 from unclejack/sha512_registry_support
import sha512 to make sha512 ssl certs work
2014-05-05 15:27:11 -07:00
Michael Crosby 4994b0fe54 Move envconfig generation to lxc driver
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-05-05 14:45:14 -07:00
Victor Vieux 222605b5fb Merge pull request #5608 from crosbymichael/net-flag-refactor
HOTFIX Update after namespace refactor
2014-05-05 13:58:09 -07:00
Michael Crosby 01fec73ba4 Update after namespace refactor
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-05-05 13:56:18 -07:00
Guillaume J. Charmes 70fef1460a Merge pull request #4441 from crosbymichael/add-net-flag
Add --net flag to docker run and allow host network stack
2014-05-05 13:54:55 -07:00
Michael Crosby 2165a4993b Merge pull request #5602 from crosbymichael/libcontainer-enable
Improve libcontainer namespace and cap format
2014-05-05 13:50:08 -07:00
Victor Vieux 51933bd5e1 Merge pull request #5575 from vieux/pr-5428 2014-05-05 13:48:36 -07:00
Victor Vieux 7c3a06634b Merge pull request #5538 from shykes/pr_out_engine_catchall_handler_is_shadowed_by_specific_handlers 2014-05-05 13:48:11 -07:00
Victor Vieux 07db13509b Merge pull request #5596 from dotcloud/contrib-fix
Post-commit hook URL fix
2014-05-05 13:44:48 -07:00
Michael Crosby 99be235332 Merge pull request #5400 from bmatsuo/5398-fix-pkg/graphdb-osx 2014-05-05 13:41:43 -07:00
James Turnbull 13c1865541 Merge pull request #5604 from nirvdrum/patch-1
It's its.
2014-05-05 21:49:47 +02:00
Tianon Gravi 168452f9b0 Merge pull request #5580 from tianon/update-vendor-versions
Update vendored deps that have a proper version number to use said specific versions
2014-05-05 13:45:03 -06:00
Kevin Menard b25208ee3e It's its. 2014-05-05 15:43:11 -04:00
Michael Crosby db5f6b4aa0 Improve libcontainer namespace and cap format
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-05-05 12:34:21 -07:00
Michael Crosby 34e09afa24 Merge pull request #5544 from vieux/cleanup_api_client
Cleanup api client
2014-05-05 11:16:57 -07:00
Rohit Jnagal 412324cfbe Check supplied hostname before using it.
Docker-DCO-1.1-Signed-off-by: Rohit Jnagal <jnagal@google.com> (github: rjnagal)
2014-05-05 18:12:25 +00:00
Alexander Larsson 5b094530c0 cgroups: Update systemd to match fs backend
This updates systemd.Apply to match the fs backend by:
* Always join blockio controller (for stats)
* Support CpusetCpus
* Support MemorySwap

Also, it removes the generic UnitProperties in favour of a single
option to set the slice.

Docker-DCO-1.1-Signed-off-by: Alexander Larsson <alexl@redhat.com> (github: alexlarsson)
2014-05-05 20:06:44 +02:00
Michael Crosby f2d7c77c63 Add alex as devmapper and btrfs maintainer
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-05-05 10:47:55 -07:00
Michael Crosby e3d6898da1 Merge pull request #5591 from alexlarsson/fix-expose-parsing
nat: Fix --expose protocol parsing
2014-05-05 10:32:26 -07:00
unclejack 7da186c3e5 import sha512 to make sha512 ssl certs work
Docker-DCO-1.1-Signed-off-by: Cristian Staretu <cristian.staretu@gmail.com> (github: unclejack)
2014-05-05 20:29:20 +03:00
Guillaume J. Charmes 5f301191cf Merge pull request #5496 from unclejack/check_if_root
check if the daemon is run as root on startup
2014-05-05 10:13:17 -07:00
Victor Vieux f369278725 Merge pull request #5569 from vieux/add__ping_to_the_API
Add  ping to the api
2014-05-05 10:09:31 -07:00
Michael Crosby 0b187b909b Address code review feedback
Also make sure we copy the joining containers hosts and resolv.conf with
the hostname if we are joining it's network stack.
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-05-05 10:08:59 -07:00
Michael Crosby c1c6b3ccd9 Add docs for --net flag
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-05-05 10:08:59 -07:00
Michael Crosby 5ca6532011 Update host networking with hostname and files
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-05-05 10:08:59 -07:00
Michael Crosby a785882b29 Setup host networking for lxc and native
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-05-05 10:08:59 -07:00
Michael Crosby 2c2cc051d8 Update --net flags and container mode
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-05-05 10:08:59 -07:00
Johan Euphrosine 7118416aee runconfig/parse: add test for parseNetMode
Docker-DCO-1.1-Signed-off-by: Johan Euphrosine <proppy@google.com> (github: proppy)
2014-05-05 10:08:59 -07:00
Johan Euphrosine a60159f3b1 runconfig: add -net container:name option
Docker-DCO-1.1-Signed-off-by: Johan Euphrosine <proppy@google.com> (github: proppy)
2014-05-05 10:08:59 -07:00
Tianon Gravi d103f0186a Merge pull request #5562 from rhatdan/master
Fix docker man page to reference selinux-enable flag
2014-05-05 10:34:49 -06:00
James Turnbull c34bb099e5 Fixed the horrible OSX installation docs
Docker-DCO-1.1-Signed-off-by: James Turnbull <james@lovedthanlost.net> (github: jamtur01)
2014-05-05 17:02:03 +02:00
James Turnbull 30d458c534 Merge pull request #5592 from SvenDowideit/docs-simplify-osx-install
Several OSX install reader issues fixed
2014-05-05 16:46:03 +02:00
Aaron Huslage 10766e1fb4 Post-commit hook URL fix
Updating CONTRIBUTING to include the correct URL for the post-commit hook.

Docker-DCO-1.1-Signed-off-by: Aaron Huslage <huslage@gmail.com> (github: huslage)
2014-05-05 10:28:52 -04:00
Sven Dowideit 56d71ae79b Several reader issues fixed
- Fix boot2docker url
- move HomeBrew instructions to a separate section
- fix docker client 5-liner to work (its still ugly)
- fix and update program output

Docker-DCO-1.1-Signed-off-by: Sven Dowideit <SvenDowideit@fosiki.com> (github: SvenDowideit)
2014-05-05 22:52:12 +10:00
Dan Walsh e625bad3d7 Fix docker man page to reference selinux-enable flag
Docker-DCO-1.1-Signed-off-by: Daniel Walsh <dwalsh@redhat.com> (github: rhatdan)
2014-05-05 08:41:21 -04:00
O.S. Tezer e9fd8e285e Merge pull request #5587 from SvenDowideit/docs-examples-style-guide
Rearrange the existing info a little, and add example style guide
2014-05-05 13:36:47 +01:00
Sven Dowideit 46755dfc1a Rearrange the existing info a little, and add example style guide
Docker-DCO-1.1-Signed-off-by: Sven Dowideit <SvenDowideit@fosiki.com> (github: SvenDowideit)
2014-05-05 22:18:12 +10:00
Alexander Larsson a304dcef00 nat: Fix --expose protocol parsing
A command like:
 docker run --expose 5353/tcp -P fedora sleep 10

Currently fails with:
Error: Cannot start container 5c558de5f0bd85ff14e13e3691aefbe531346297a27d4b3562732baa8785b34a: unknown protocol

This is because nat.SplitProtoPort() confuses the order of the port and
proto in 5353/tcp, assuming the protocol is first. However, in all other
places in docker the protocol is last, so the fix is just to swap these.

Docker-DCO-1.1-Signed-off-by: Alexander Larsson <alexl@redhat.com> (github: alexlarsson)
2014-05-05 12:54:10 +02:00
Sven Dowideit 3230889d24 Merge pull request #5585 from lukemarsden/patch-1
git clone should use https URL in devenvironment.md
2014-05-05 08:48:13 +10:00
lukemarsden 6799d14cb8 Update devenvironment.md
`git clone` should use `https` URL.
2014-05-04 17:52:48 +01:00
O.S. Tezer 9488832c6d Merge pull request #5579 from jamtur01/linkdashs
Fixed a couple of single dashes in links document
2014-05-04 13:28:46 +01:00
Tianon Gravi 8d7ed2cae4 Update vendored deps that have a proper version number to use said specific versions
Docker-DCO-1.1-Signed-off-by: Andrew Page <admwiggin@gmail.com> (github: tianon)
2014-05-03 20:34:21 -06:00
James Turnbull bfac0b24ed Fixed a couple of single dashes in links document
Docker-DCO-1.1-Signed-off-by: James Turnbull <james@lovedthanlost.net> (github: jamtur01)
2014-05-04 03:16:21 +02:00
O.S. Tezer 54e20b8f7b Merge pull request #5578 from msulima/patch-1
hello_world.md - $container_id variable case sensitivity
2014-05-03 12:53:14 +01:00
O.S. Tezer f33298024b Merge pull request #5568 from felixrabe/patch-6
cli.md: More typos
2014-05-03 12:50:57 +01:00
O.S. Tezer 49af92a7a9 Merge pull request #5572 from felixrabe/patch-5
run.md: Close braces
2014-05-03 12:42:04 +01:00
O.S. Tezer d0c97d5bd2 Merge pull request #5564 from felixrabe/patch-4
cli.md: sudo at the right place
2014-05-03 12:36:31 +01:00
Sven Dowideit b2268d1ac0 Merge pull request #5551 from felixrabe/patch-1
cli.md: Fix up Markdown formatting by adding one `
2014-05-03 21:02:25 +10:00
Sven Dowideit a911f42d1e Merge pull request #5570 from felixrabe/patch-3
run.md: Convert some backticks to apo's
2014-05-03 20:39:01 +10:00
Mateusz Sulima dca1c0073f hello_world.md - $container_id variable case sensitivity
If you run the tutorial step-by-step, following error occurs:

```$ sudo docker logs $container_id
Usage: docker logs CONTAINER
Fetch the logs of a container
  -f, --follow=false: Follow log output```

This is obviously because bash variables are case-sensitive, so it mustn't be `CONTAINER_ID` above.

Docker-DCO-1.1-Signed-off-by: Mateusz Sulima <sulima.mateusz@email.com> (github: github_handle)
2014-05-03 12:22:33 +02:00
Victor Vieux 328d65dcff remove fixme
Docker-DCO-1.1-Signed-off-by: Victor Vieux <vieux@docker.com> (github: vieux)
2014-05-03 00:54:52 +00:00
Solomon Hykes c4089ad80b Move 'search' to the registry subsystem
This continues the effort to separate all registry logic from the
deprecated `Server` object.

* 'search' is exposed by `github.com/dotcloud/docker/registry/Service`
* Added proper documentation of Search while I was at it

Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-05-03 00:37:32 +00:00
Solomon Hykes 3d605683b3 Move 'auth' to the registry subsystem
This is the first step towards separating the registry subsystem from
the deprecated `Server` object.

* New service `github.com/dotcloud/docker/registry/Service`
* The service is installed by default in `builtins`
* The service only exposes `auth` for now...
* ...Soon to be followed by `pull`, `push` and `search`.

Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-05-03 00:37:06 +00:00
Felix Rabe 4a3b0e8d5d run.md: Close braces
Docker-DCO-1.1-Signed-off-by: Felix Rabe <felix@rabe.io> (github: felixrabe)
2014-05-03 02:20:59 +02:00
Michael Crosby 3a1f0dedc7 Merge pull request #5556 from crosbymichael/no-restrict-lxc
Don't restrict lxc because of apparmor
2014-05-02 17:20:27 -07:00
Felix Rabe 205bd91fca run.md: Convert some backticks to apo's 2014-05-03 02:11:00 +02:00
Victor Vieux 5bb430197e Merge pull request #5063 from vieux/force_rmi_stopped_container
docker rmi -f works with stopped containers + revamped error messages
2014-05-02 16:41:13 -07:00
Victor Vieux 1c48dfebb9 Merge pull request #5537 from shykes/pr_out_api_server_better_error_checking_to_avoid_unnecessary_panics 2014-05-02 16:05:07 -07:00
Solomon Hykes f37ce76bf6 api/server: better error checking to avoid unnecessary panics
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-05-02 16:03:37 -07:00
Felix Rabe 015a2abafa cli.md: More typos
I've seen one other missing space that I addressed in another PR already.
I don't know whether that is a common occurrence in the docs.

About the second diff chunk, it looks like some copy-paste mistake to me.

Docker-DCO-1.1-Signed-off-by: Felix Rabe <felix@rabe.io> (github: felixrabe)
2014-05-03 00:52:48 +02:00
O.S. Tezer cefb0d1277 Merge pull request #5563 from felixrabe/patch-3
cli.md: Add space
2014-05-02 23:33:48 +01:00
O.S. Tezer 069400a7ac Merge pull request #5566 from felixrabe/patch-5
cli.md: Add another sudo
2014-05-02 23:32:33 +01:00
Solomon Hykes 3b73c26194 Engine: empty job names are illegal, catchall or not
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-05-02 15:25:33 -07:00
Solomon Hykes de75af9fe2 engine: catchall handler is shadowed by specific handlers
This allows using `Engine.Register` and `Engine.RegisterCatchall` on the
same engine without the catchall hiding all other handlers.

Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-05-02 15:25:32 -07:00
Guillaume J. Charmes 103d028132 Merge pull request #5560 from gabrtv/deregister-containers-earlier
De-register containers before removing driver and containerGraph references
2014-05-02 15:20:51 -07:00
Victor Vieux a0cef41061 Merge pull request #5567 from creack/remove_unused_file 2014-05-02 15:08:42 -07:00
Victor Vieux c65de2c020 return write error
Docker-DCO-1.1-Signed-off-by: Victor Vieux <vieux@docker.com> (github: vieux)
2014-05-02 22:03:59 +00:00
Felix Rabe e318af6fb0 cli.md: sudo at the right place
Docker-DCO-1.1-Signed-off-by: Felix Rabe <felix@rabe.io> (github: felixrabe)
2014-05-02 23:58:05 +02:00
Victor Vieux 3c422fe5bf add doc
Docker-DCO-1.1-Signed-off-by: Victor Vieux <vieux@docker.com> (github: vieux)
2014-05-02 21:51:20 +00:00
Jérôme Petazzoni b3ff1c55e3 Merge pull request #5462 from tianon/hack-dind-style
Update hack/dind to match the rest of our scripts
2014-05-02 14:43:56 -07:00
Victor Vieux cf0076b92d add _ping endpoint
Docker-DCO-1.1-Signed-off-by: Victor Vieux <vieux@docker.com> (github: vieux)
2014-05-02 21:43:51 +00:00
Guillaume J. Charmes 8913ec4912 Remove unused daemon/sorter.go
Docker-DCO-1.1-Signed-off-by: Guillaume J. Charmes <guillaume@charmes.net> (github: creack)
2014-05-02 14:16:05 -07:00
Michael Crosby ac7b2b888d Merge pull request #5565 from creack/fix_devpts
Month devpts before mounting subdirs
2014-05-02 14:14:46 -07:00
Felix Rabe 4706a1ad76 cli.md: Add another sudo 2014-05-02 23:13:28 +02:00
Felix Rabe 12a4b376fd cli.md: Add space 2014-05-02 22:56:35 +02:00
Guillaume J. Charmes a7ccbfd5f1 Month devpts before mounting subdirs
Docker-DCO-1.1-Signed-off-by: Guillaume J. Charmes <guillaume@charmes.net> (github: creack)
2014-05-02 13:55:45 -07:00
Victor Vieux 45be6f6dff fix https
Docker-DCO-1.1-Signed-off-by: Victor Vieux <vieux@docker.com> (github: vieux)
2014-05-02 19:49:12 +00:00
Gabriel Monroy 9f152aacf8 deregister containers before removing driver and containerGraph references
This is required to address a race condition described in #5553,
where a container can be partially deleted -- for example, the
root filesystem but not the init filesystem -- which makes
it impossible to delete the container without re-adding the
missing filesystems manually.

This behavior has been witnessed when rebooting boxes that
are configured to remove containers on shutdown in parallel
with stopping the Docker daemon.

Docker-DCO-1.1-Signed-off-by: Gabriel Monroy <gabriel@opdemand.com> (github: gabrtv)
2014-05-02 13:27:17 -06:00
Michael Crosby 4d521f479b Merge pull request #5507 from shykes/dind-maintainer
Make Jerome Petazzoni a maintainer for dind
2014-05-02 11:25:41 -07:00
Michael Crosby 59fe77bfa6 Don't restrict lxc because of apparmor
We don't have the flexibility to do extra things with lxc because it is
a black box and most fo the magic happens before we get a chance to
interact with it in dockerinit.
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-05-02 11:14:24 -07:00
Guillaume J. Charmes 1c5a3123cc Merge pull request #5529 from crosbymichael/restrict-proc
Mount /proc and /sys read-only, except in privileged containers
2014-05-02 10:52:53 -07:00
Victor Vieux 8c9192cd76 move hijack to it's own file
Docker-DCO-1.1-Signed-off-by: Victor Vieux <vieux@docker.com> (github: vieux)
2014-05-02 17:45:58 +00:00
Felix Rabe 877ad96d89 cli.md: Fix up Markdown formatting by adding one ` 2014-05-02 16:53:59 +02:00
Solomon Hykes b372c19b38 Merge pull request #5501 from discordianfish/add-commit-message-bp 2014-05-01 23:47:31 -07:00
Solomon Hykes f4b60a385c Merge pull request #5536 from vmarmol/add-maintainers-libcontainer 2014-05-01 23:42:50 -07:00
Michael Crosby 76fa7d588a Apply apparmor before restrictions
There is not need for the remount hack, we use aa_change_onexec so the
apparmor profile is not applied until we exec the users app.
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-05-01 19:09:12 -07:00
James Turnbull b263495f6a Merge pull request #5541 from SvenDowideit/docs-generate-all-api-docs
Force the older API docs to be generated.
2014-05-01 20:58:12 -04:00
Sven Dowideit 41db175626 Force the older API docs to be generated.
Docker-DCO-1.1-Signed-off-by: Sven Dowideit <SvenDowideit@fosiki.com> (github: SvenDowideit)
2014-05-02 10:46:41 +10:00
Victor Vieux 314bd02d2c remove when httputil.NewClientConn when not in hijack
Docker-DCO-1.1-Signed-off-by: Victor Vieux <vieux@docker.com> (github: vieux)
2014-05-02 00:25:10 +00:00
Sven Dowideit 148e081ded Merge pull request #5521 from SvenDowideit/doc-auto-section
make sure the intermediate index.html files are generated consistently
2014-05-02 10:13:18 +10:00
Sven Dowideit 5a8ffe7ef1 make sure the intermediate index.html files are generated consistently
Docker-DCO-1.1-Signed-off-by: Sven Dowideit <SvenDowideit@fosiki.com> (github: SvenDowideit)
2014-05-02 10:08:25 +10:00
O.S. Tezer ccbc4f24d6 Merge pull request #5517 from SvenDowideit/5267-make-archived-docs-hidden-but-linkable
Bring back archived remote API versions
2014-05-02 02:56:03 +03:00
Sven Dowideit de49e7c0a6 Bring back archived remote API versions
- git mv archived/* .
- put the links back into the summary document
- reduce the header depth by 1 so the TOC lists each API version
- update the mkdocs.yaml to render the archived API docs, but not add
  them to the menu/nav

Docker-DCO-1.1-Signed-off-by: Sven Dowideit <SvenDowideit@fosiki.com> (github: SvenDowideit)
2014-05-02 09:47:33 +10:00
James Turnbull edab1bd5e5 Merge pull request #5524 from ostezer/docs-fix-codeblocks
Improve code/comment/output markings & display consistency
2014-05-01 19:39:06 -04:00
Victor Marmol 71e3757174 Adding Rohit Jnagal and Victor Marmol to pkg/libcontainer maintainers.
Docker-DCO-1.1-Signed-off-by: Victor Marmol <vmarmol@google.com> (github: vmarmol)
2014-05-01 15:51:38 -07:00
Michael Crosby 24e0df8136 Fix /proc/kcore mount of /dev/null
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-05-01 15:26:58 -07:00
Michael Crosby 3f74bdd93f Mount attr and task as rw for selinux support
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-05-01 15:26:58 -07:00
Michael Crosby f5139233b9 Update restrictions for better handling of mounts
This also cleans up some of the left over restriction paths code from
before.
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-05-01 15:26:58 -07:00
Michael Crosby 83982e8b1d Update to enable cross compile
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-05-01 15:26:58 -07:00
Jérôme Petazzoni 1c4202a614 Mount /proc and /sys read-only, except in privileged containers.
It has been pointed out that some files in /proc and /sys can be used
to break out of containers. However, if those filesystems are mounted
read-only, most of the known exploits are mitigated, since they rely
on writing some file in those filesystems.

This does not replace security modules (like SELinux or AppArmor), it
is just another layer of security. Likewise, it doesn't mean that the
other mitigations (shadowing parts of /proc or /sys with bind mounts)
are useless. Those measures are still useful. As such, the shadowing
of /proc/kcore is still enabled with both LXC and native drivers.

Special care has to be taken with /proc/1/attr, which still needs to
be mounted read-write in order to enable the AppArmor profile. It is
bind-mounted from a private read-write mount of procfs.

All that enforcement is done in dockerinit. The code doing the real
work is in libcontainer. The init function for the LXC driver calls
the function from libcontainer to avoid code duplication.

Docker-DCO-1.1-Signed-off-by: Jérôme Petazzoni <jerome@docker.com> (github: jpetazzo)
2014-05-01 15:26:58 -07:00
Michael Crosby 559dc9a66a Merge pull request #5534 from vieux/fix_apparmor_inside_container
Fix apparmor inside container
2014-05-01 15:25:40 -07:00
Victor Vieux de191e8632 skip apparmor with dind
Docker-DCO-1.1-Signed-off-by: Victor Vieux <vieux@docker.com> (github: vieux)
2014-05-01 22:22:08 +00:00
Victor Vieux ae686c0486 Revert "add apparmor to the Dockerfile"
This reverts commit fa1e390cad.

Docker-DCO-1.1-Signed-off-by: Victor Vieux <vieux@docker.com> (github: vieux)
2014-05-01 21:49:53 +00:00
Tianon Gravi 8296125b32 Merge pull request #5532 from vieux/add_apparmor_dockerfile
Add apparmor to the Dockerfile to fix dind issues
2014-05-01 15:00:48 -06:00
Victor Vieux fa1e390cad add apparmor to the Dockerfile
Docker-DCO-1.1-Signed-off-by: Victor Vieux <vieux@docker.com> (github: vieux)
2014-05-01 20:51:16 +00:00
Michael Crosby 20bcb80f40 Merge pull request #5457 from tiborvass/5423-bridge-ip
Fix bridge ip comparison
2014-05-01 11:56:47 -07:00
Michael Crosby ab0518bfe8 Merge pull request #5528 from crosbymichael/drop-capsyslog
drop CAP_SYSLOG capability
2014-05-01 11:52:08 -07:00
Eiichi Tsukata cac0cea03f drop CAP_SYSLOG capability
Kernel capabilities for privileged syslog operations are currently splitted into
CAP_SYS_ADMIN and CAP_SYSLOG since the following commit:
http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=ce6ada35bdf710d16582cc4869c26722547e6f11

This patch drops CAP_SYSLOG to prevent containers from messing with
host's syslog (e.g. `dmesg -c` clears up host's printk ring buffer).

Closes #5491

Docker-DCO-1.1-Signed-off-by: Eiichi Tsukata <devel@etsukata.com> (github: Etsukata)
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-05-01 11:43:55 -07:00
Guillaume J. Charmes fe4a25546a Merge pull request #5515 from crosbymichael/refactor-libcontainer2
Remove CommandFactory and NsInit interface
2014-05-01 11:41:54 -07:00
Solomon Hykes 10a50fcd8f Merge pull request #5526 from shykes/pr_out_beam_add_simple_framing_system_for_unixconn 2014-05-01 11:06:14 -07:00
Alexander Larsson 24f9187a04 beam: Add simple framing system for UnixConn
This is needed for Send/Recieve to correctly handle borders between
the messages.

The framing uses a single 32bit uint32 length for each frame, of which
the high bit is used to indicate whether the message contains a file
descriptor or not. This is enough to separate out each message sent
and to decide to which message each file descriptors belongs, even
though multiple Sends may be coalesced into a single read, and/or one
Send can be split into multiple writes.

Docker-DCO-1.1-Signed-off-by: Alexander Larsson <alexl@redhat.com> (github: alexlarsson)
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-05-01 11:06:01 -07:00
Guillaume J. Charmes c42db412b6 Merge pull request #5092 from LK4D4/timestamp_for_docker_logs_#1165
Timestamps for docker logs.
2014-05-01 10:32:34 -07:00
Alexandr Morozov d1297feef8 Timestamps for docker logs.
Fixes #1165
Docker-DCO-1.1-Signed-off-by: Alexandr Morozov <lk4d4math@gmail.com> (github: LK4D4)
2014-05-01 20:40:36 +04:00
O.S.Tezer f87a97f7df Improve code/comment/output markings & display consistency
This PR aims to increase the consistency across the docs for
code blocks and code/comment/output markings.

Rule followed here is "what's visible on the screen should be reflected"

Issue:

 - Docs had various code blocks showing: comments, commands & outputs.
 - All three of these items were inconsistently marked.

Some examples as to how this PR aims to introduce improvements:

1. Removed `> ` from in front of the "outputs". Eg,
`    > REPOSITORY                 TAG       ID              CREATED` replaced with:
`    REPOSITORY                 TAG       ID              CREATED`.

2. Introduced `$` for commands. Eg,
`    sudo chkconfig docker on` replaced with:
`    $ sudo chkconfig docker on`

3. Comments:
`    > # ` replaced with:
`    # `.

> Please note:
> Due to a vast amount of items reviewed and changed for this PR, there
> might be some individually incorrect replacements OR patterns of incorrect
> replacements. This PR needs to be reviewed and if there is anything missing,
> it should be improved or amended.

Closes:
https://github.com/dotcloud/docker/issues/5286

Docker-DCO-1.1-Signed-off-by: O.S. Tezer <ostezer@gmail.com> (github: ostezer)
2014-05-01 17:52:01 +03:00
O.S. Tezer 51a39563fa Merge pull request #5519 from SvenDowideit/remove-rst-docs
remove rst/sphinx documentation
2014-05-01 16:33:54 +03:00
O.S. Tezer c52bb90d03 Merge pull request #5516 from SvenDowideit/docs-meta-rendering
add page_description and page_keywords md meta to mkdocs html template
2014-05-01 16:16:48 +03:00
Sven Dowideit adf04681b4 remove rst/sphinx documentation
Docker-DCO-1.1-Signed-off-by: Sven Dowideit <SvenDowideit@fosiki.com> (github: SvenDowideit)
2014-05-01 15:31:58 +10:00
Sven Dowideit 8ae53ef167 add page_description and page_keywords md meta to mkdocs html template
Docker-DCO-1.1-Signed-off-by: Sven Dowideit <SvenDowideit@fosiki.com> (github: SvenDowideit)
2014-05-01 12:41:57 +10:00
Victor Vieux 9da75eb4df Merge pull request #5514 from vbatts/vbatts-save_typo
docker save: typo reference image, not container
2014-04-30 19:00:22 -07:00
Michael Crosby d0bee79394 Remove container.json from readme
No need to duplicate this information when we already have a
container.json file in the root of libcontainer
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-30 18:52:15 -07:00
Vincent Batts 93f8e277de docker save: typo reference image, not container
Docker-DCO-1.1-Signed-off-by: Vincent Batts <vbatts@redhat.com> (github: vbatts)
2014-04-30 21:51:03 -04:00
Michael Crosby da0d6dbd7b Make native driver use Exec func with different CreateCommand
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-30 18:49:24 -07:00
Michael Crosby aa9705f832 Fix execin with environment and Enabled support
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-30 18:24:47 -07:00
Michael Crosby 60e4276f5a Integrate new structure into docker's native driver
This duplicates some of the Exec code but I think it it worth it because
the native driver is more straight forward and does not have the
complexity have handling the type issues for now.
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-30 18:20:01 -07:00
Michael Crosby 176c49d7a9 Remove command factory and NsInit interface from libcontainer
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-30 17:55:15 -07:00
Michael Crosby b6b0dfdba7 Export more functions from libcontainer
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-30 17:18:07 -07:00
Michael Crosby aecb9c39ab Split term files to make it easier to manage
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-30 17:04:24 -07:00
Michael Crosby a3e96abb5a Export syncpipe fields
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-30 17:02:45 -07:00
Guillaume J. Charmes 26ac05c8bc Merge pull request #5511 from crosbymichael/refactor-libcontainer
Refactor: remove statewriter type and all callback for process start
2014-04-30 16:50:57 -07:00
Guillaume J. Charmes be013c7820 Merge pull request #5512 from crosbymichael/set-freezer
Add ability to set cgroups freezer
2014-04-30 16:50:01 -07:00
Michael Crosby 5f6fda8cfd Add ability to set cgroups freezer
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-30 16:07:12 -07:00
Michael Crosby f110401437 Remove statewriter interface, export more libcontainer funcs
This temp. expands the Exec method's signature but adds a more robust
way to know when the container's process is actually released and begins
to run.  The network interfaces are not guaranteed to be up yet but this
provides a more accurate view with a single callback at this time.
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-30 15:52:40 -07:00
Michael Crosby cd8cec854b Export SetupUser
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-30 15:27:59 -07:00
Michael Crosby 162dafbcd5 Remove logger from nsinit struct
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-30 15:24:18 -07:00
Michael Crosby bfedf247a4 Merge pull request #5498 from tianon/better-apparmor-missing-error 2014-04-30 15:16:43 -07:00
Guillaume J. Charmes 2a711d16e0 Merge pull request #5448 from crosbymichael/selinux-defaults
Add selinux label support for processes and mount
2014-04-30 14:14:39 -07:00
Michael Crosby 2fc5bed61d Merge pull request #5506 from crosbymichael/add-system-maintainer
Add system maintainers
2014-04-30 14:14:21 -07:00
Tibor Vass 986c647d5a Fix bridge ip comparison
Docker-DCO-1.1-Signed-off-by: Tibor Vass <teabee89@gmail.com> (github: tiborvass)
2014-04-30 12:36:16 -07:00
Michael Crosby e88ef454b7 Merge pull request #5464 from tianon/close-leftover-fds 2014-04-30 12:27:52 -07:00
Solomon Hykes 1fd919bbf4 Make Jerome Petazzoni a maintainer for dind
In the spirit of getting more contributors to maintain their
components.. I nominate @jpetazzo ot maintain dind (he's the original
author).

@jpetazzo I don't expect this to be too much load, but it's a good and
symbolic start :)

Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-30 12:20:52 -07:00
Michael Crosby 6203d8b462 Add system maintainers
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-30 12:01:06 -07:00
Victor Vieux f5e5777e63 Merge pull request #5502 from tianon/remove-contrib-zfs
Remove contrib/zfs directory
2014-04-30 11:03:13 -07:00
Bryan Matsuo 99284a24e7 FIXES #5398: pkg/graphdb build only dependent on cgo tag
Docker-DCO-1.1-Signed-off-by: Bryan Matsuo <bryan.matsuo@gmail.com> (github: bmatsuo)
2014-04-30 11:57:10 -06:00
Tianon Gravi 0037dc8d60 Remove contrib/zfs directory
A WIP pull request or issue for discussion would be a better avenue for collaboration and discussion of a ZFS backend.

Docker-DCO-1.1-Signed-off-by: Andrew Page <admwiggin@gmail.com> (github: tianon)
2014-04-30 11:56:14 -06:00
Victor Vieux e8f8f1c729 Merge pull request #5500 from tianon/fix-maintainers-format
Fix various MAINTAINERS format inconsistencies
2014-04-30 10:55:45 -07:00
Johannes 'fish' Ziemke 5f00372af2 Add notes about git commit messages
This improves readability of commits a lot and is easy to
follow. I think most people follow those rules already. They are based
on http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html

Docker-DCO-1.1-Signed-off-by: Johannes 'fish' Ziemke <github@freigeist.org> (github: discordianfish)
2014-04-30 19:28:26 +02:00
Tianon Gravi defecac279 Fix various MAINTAINERS format inconsistencies
Docker-DCO-1.1-Signed-off-by: Andrew Page <admwiggin@gmail.com> (github: tianon)
2014-04-30 11:22:11 -06:00
Bryan Matsuo 8caef610b2 update AUTHORS
Docker-DCO-1.1-Signed-off-by: Bryan Matsuo <bryan.matsuo@gmail.com> (github: bmatsuo)
2014-04-30 11:08:57 -06:00
unclejack 4fac4d2149 check if the daemon is run as root on startup
This commit makes Docker throw an error if the daemon isn't started as
root.

Docker-DCO-1.1-Signed-off-by: Cristian Staretu <cristian.staretu@gmail.com> (github: unclejack)
2014-04-30 14:13:39 +03:00
Solomon Hykes 0c5375146a Merge branch 'pr-5353' 2014-04-30 02:10:53 -07:00
Alexander Larsson e802b69146 beam: Add more tests to unix_test.go
These are failing, and indicate things that need to be fixed.  The
primarily problem is the lack of framing between beam messages.

Docker-DCO-1.1-Signed-off-by: Alexander Larsson <alexl@redhat.com> (github: alexlarsson)
[solomon@docker.com: rebased on master]
Signed-off-by: Solomon Hykes <solomon@docker.com>
2014-04-30 02:10:09 -07:00
Victor Marmol 494c789ac3 Add new test-unit make rule which only runs the unit tests. Renames test
bundle to test-unit.

Docker-DCO-1.1-Signed-off-by: Victor Marmol <vmarmol@google.com> (github: vmarmol)
2014-04-30 02:10:09 -07:00
Sven Dowideit 9e2e26c69a for want of a comma, the kingdom was lost
Docker-DCO-1.1-Signed-off-by: Sven Dowideit <SvenDowideit@fosiki.com> (github: SvenDowideit)
2014-04-30 02:10:09 -07:00
Tianon Gravi a1a9baf926 Update pkg/apparmor to provide a better error message when apparmor_parser cannot be found
Docker-DCO-1.1-Signed-off-by: Andrew Page <admwiggin@gmail.com> (github: tianon)
2014-04-29 23:19:21 -06:00
Tianon Gravi 70b5652984 Merge pull request #5484 from vmarmol/add-test-unit
Add new test-unit make rule which only runs the unit tests
2014-04-29 23:15:16 -06:00
James Turnbull 48388b8178 Merge pull request #5487 from SvenDowideit/docs-fix-invalid-json
for want of a comma, the kingdom was lost
2014-04-29 22:28:59 -04:00
Solomon Hykes 20e9f61971 Merge pull request #5320 from JackDanger/jackdanger/typo-doc-fix 2014-04-29 17:41:16 -07:00
Sven Dowideit ebaff50bd2 for want of a comma, the kingdom was lost
Docker-DCO-1.1-Signed-off-by: Sven Dowideit <SvenDowideit@fosiki.com> (github: SvenDowideit)
2014-04-30 10:12:21 +10:00
Victor Marmol a39f3c9200 Add new test-unit make rule which only runs the unit tests. Renames test
bundle to test-unit.

Docker-DCO-1.1-Signed-off-by: Victor Marmol <vmarmol@google.com> (github: vmarmol)
2014-04-29 23:26:27 +00:00
Tianon Gravi d5d62ff955 Close extraneous file descriptors in containers
Without this patch, containers inherit the open file descriptors of the daemon, so my "exec 42>&2" allows us to "echo >&42 some nasty error with some bad advice" directly into the daemon log. :)

Also, "hack/dind" was already doing this due to issues caused by the inheritance, so I'm removing that hack too since this patch obsoletes it by generalizing it for all containers.

Docker-DCO-1.1-Signed-off-by: Andrew Page <admwiggin@gmail.com> (github: tianon)
2014-04-29 16:45:28 -06:00
Tianon Gravi a96cac4d7d Merge pull request #5477 from vmarmol/add-testdirs
Add a TESTDIRS variable to the test bundle to control which directories are unit tested
2014-04-29 16:40:40 -06:00
O.S. Tezer 34a3d41d17 Merge pull request #5440 from ostezer/docs-improve-code-block-rendering
Docs/CSS: Amend code block rendering.
2014-04-30 00:45:04 +03:00
Guillaume J. Charmes 2c85468753 Merge pull request #5460 from tianon/no-pull-scratch
Use "docker load" to create "scratch" in hack/make/test-integration-cli (instead of implicitly pulling it from the index)
2014-04-29 14:37:06 -07:00
O.S. Tezer 473b7a6c93 Merge pull request #5478 from amangoel/patch-1
Update working-with-docker.md
2014-04-30 00:00:14 +03:00
Victor Marmol 6e05c420c9 Add a TESTDIRS variable to the test bundle to allow for the running of a
single go directory worth of tests.

Docker-DCO-1.1-Signed-off-by: Victor Marmol <vmarmol@google.com> (github: vmarmol)
2014-04-29 20:55:04 +00:00
amangoel 83a5f2a192 Update working-with-docker.md 2014-04-29 13:49:36 -07:00
O.S. Tezer 1bc0f82406 Merge pull request #5475 from srijs/patch-1
docs: DisableNetwork -> NetworkDisabled
2014-04-29 23:43:28 +03:00
Michael Crosby bf59e67232 Merge pull request #5476 from rjnagal/libcontainer-fixes
Cleanup cgroups on Set failures
2014-04-29 12:27:31 -07:00
Sam Rijs 9651ff46bf docs: DisableNetwork -> NetworkDisabled
Docker-DCO-1.1-Signed-off-by: Samuel Reis <srijs@airpost.net> (github: srijs)
2014-04-29 21:18:26 +02:00
Victor Vieux 9d4771760a Merge pull request #5474 from crosbymichael/use-proper-scheme
Use proper scheme with static registry
2014-04-29 12:04:49 -07:00
Rohit Jnagal 070747a213 Cleanup existing controllers when cleanup fails mid-way.
Docker-DCO-1.1-Signed-off-by: Rohit Jnagal <jnagal@google.com> (github: rjnagal)
2014-04-29 18:59:20 +00:00
Victor Vieux 8a5060dba4 Merge pull request #4607 from vbatts/vbatts-static_registry
static registry support
2014-04-29 11:22:44 -07:00
Michael Crosby 0c7143b323 Add mountlabel to dev
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-29 03:41:44 -07:00
Michael Crosby 1a5ffef6c6 Do not return labels when in privileged mode
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-29 03:40:06 -07:00
Michael Crosby 64d0f7e39b Add cli flag to docs for selinux support
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-29 03:40:06 -07:00
Michael Crosby 46e05ed2d9 Update process labels to be set at create not start
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-29 03:40:05 -07:00
Michael Crosby ae00649305 Update devicemapper to pass mount flag
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-29 03:40:05 -07:00
Dan Walsh 12934ef3a4 Fix SELinux errors caused by multi-threading
Occasionally the selinux_test program will fail because we are setting file
context based on the Process ID but not the TID.  THis change will always
use the TID to set SELinux labels.

Docker-DCO-1.1-Signed-off-by: Daniel Walsh <dwalsh@redhat.com> (github: rhatdan)
Docker-DCO-1.1-Signed-off-by: Dan Walsh <dwalsh@redhat.com> (github: crosbymichael)
2014-04-29 03:40:05 -07:00
Dan Walsh b7942ec2ca This patch reworks the SELinux patch to be only run on demand by the daemon
Added --selinux-enable switch to daemon to enable SELinux labeling.

The daemon will now generate a new unique random SELinux label when a
container starts, and remove it when the container is removed.   The MCS
labels will be stored in the daemon memory.  The labels of containers will
be stored in the container.json file.

When the daemon restarts on boot or if done by an admin, it will read all containers json files and reserve the MCS labels.

A potential problem would be conflicts if you setup thousands of containers,
current scheme would handle ~500,000 containers.

Docker-DCO-1.1-Signed-off-by: Dan Walsh <dwalsh@redhat.com> (github: rhatdan)
Docker-DCO-1.1-Signed-off-by: Dan Walsh <dwalsh@redhat.com> (github: crosbymichael)
2014-04-29 03:40:05 -07:00
Michael Crosby f0e6e135a8 Initial work on selinux patch
This has every container using the docker daemon's pid for the processes
label so it does not work correctly.
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-29 03:40:05 -07:00
O.S. Tezer 797a4151a0 Merge pull request #5458 from SvenDowideit/add-redirects-for-docker-io-pr-5414
add redirects from index/ -> docker-io/ and for the docker-io_api too
2014-04-29 12:37:22 +03:00
Michael Crosby 44d54ba0c2 Use proper scheme with static registry
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-29 02:01:07 -07:00
Tianon Gravi b1fe1797f3 Update hack/dind to match the rest of our scripts
No functional changes here, just coding style and maintainability.

Docker-DCO-1.1-Signed-off-by: Andrew Page <admwiggin@gmail.com> (github: tianon)
2014-04-28 23:16:40 -06:00
Tianon Gravi 83999e70f4 Merge pull request #5433 from SvenDowideit/remove-sphinx-validation-from-build
Remove Travis Sphinx validation
2014-04-28 22:59:53 -06:00
Tianon Gravi a7f21570b6 Merge pull request #5459 from shykes/remove-bootcamp
Remove obsolete 'bootcamp' project.
2014-04-28 22:59:20 -06:00
Tianon Gravi c8381d6722 Use "docker load" to create "scratch" in hack/make/test-integration-cli (instead of implicitly pulling it from the index)
Creating the "docker save" tarball for "scratch" is pretty simple.  I've also extrapolated the "docker build -t busybox ." logic into a separate "hack/make/.ensure-busybox" file so that it can eventually be reused easier.

Docker-DCO-1.1-Signed-off-by: Andrew Page <admwiggin@gmail.com> (github: tianon)
2014-04-28 22:26:25 -06:00
Solomon Hykes 46492ee65a Remove obsolete 'bootcamp' project.
It was a nice idea to recruit more maintainers but we never found the
time to do it properly...

I am still interested in any ideas to make it easier to start
contributing!

Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-28 21:25:26 -07:00
Tianon Gravi e4114e6b94 Update some whitespace in hack/make/test-integration-cli for consistency
Docker-DCO-1.1-Signed-off-by: Andrew Page <admwiggin@gmail.com> (github: tianon)
2014-04-28 22:22:31 -06:00
Sven Dowideit 17fbe3de38 remove the sphinx validation - we'll add a MarkDown one when we have it
Docker-DCO-1.1-Signed-off-by: Sven Dowideit <SvenDowideit@fosiki.com> (github: SvenDowideit)
2014-04-29 13:43:13 +10:00
Sven Dowideit 53c35412f9 Merge pull request #5438 from ostezer/docs-expand-viewport
Docs/CSS fix: Allow viewport expand to user's preference
2014-04-29 13:35:10 +10:00
Sven Dowideit 33f36177e9 add redirects from index/ -> docker-io/ and for the docker-io_api too
Docker-DCO-1.1-Signed-off-by: Sven Dowideit <SvenDowideit@fosiki.com> (github: SvenDowideit)
2014-04-29 13:33:22 +10:00
Sven Dowideit 6c4e5ee826 Merge pull request #5414 from jamtur01/privreg
Addressed regression of private repository documentation.
2014-04-29 13:28:21 +10:00
James Turnbull 81d6c0f106 Merge pull request #5439 from ostezer/docs-mkdocs-theme-maintainer-update
Docs/theme/MAINTAINERS: Modify/Update list of MAINTAINERS
2014-04-28 23:12:10 -04:00
James Turnbull 548cadd0a2 Merge pull request #5441 from ostezer/docs-fix-notes-warnings-bg
Docs/CSS: Fix Notes/Warnings blocks' BG colour to improve its state.
2014-04-28 23:09:13 -04:00
James Turnbull 6b5fd2daf7 Merge pull request #5443 from ncdc/commit-api-doc-fix
Docs fix: correct /commit info
2014-04-28 23:09:04 -04:00
Michael Crosby 69d56acd45 Merge pull request #5455 from rjnagal/cgroup-stats
Add throttling stats for cpu cgroup
2014-04-28 17:53:37 -07:00
Rohit Jnagal d724242297 Another test to check for invalid stats.
Docker-DCO-1.1-Signed-off-by: Rohit Jnagal <jnagal@google.com> (github: rjnagal)
2014-04-29 00:32:05 +00:00
Michael Crosby 934bd15565 Merge pull request #5389 from tiborvass/5152-symlink-in-volume
Fixes #5152 : symlink in volume path
2014-04-28 17:27:18 -07:00
Rohit Jnagal 61f156d521 Add cpu throttling stats.
Docker-DCO-1.1-Signed-off-by: Rohit Jnagal <jnagal@google.com> (github: rjnagal)
2014-04-29 00:18:18 +00:00
Tianon Gravi 0932488402 Merge pull request #5450 from tianon/update-deb-cgroup-dep
Update the "cgroup-lite" dep in our deb package from "Suggests" to "Recommends" and add "cgroupfs-mount" as another alternative
2014-04-28 17:49:36 -06:00
Michael Crosby 5b3f7851d8 Merge pull request #5451 from vmarmol/add-memory-stats
Adding a unit test for stats in pkg/cgroup/fs/memory.go
2014-04-28 16:38:34 -07:00
Victor Vieux eb6a1c9f49 Merge pull request #5449 from tianon/remove-libcontainer-root-special-case
Remove "root" and "" special cases in libcontainer
2014-04-28 16:29:08 -07:00
Michael Crosby fbc7a069f2 Merge pull request #5392 from rjnagal/libcontainer-fixes
Minor libcontainer fixes
2014-04-28 16:26:17 -07:00
Tianon Gravi 314818e7ba Update the "cgroup-lite" dep in our deb package from "Suggests" to "Recommends" and add "cgroupfs-mount" as another alternative
I tested to verify that if neither package is available (for example, on Debian Wheezy), apt still continues installing properly.

Docker-DCO-1.1-Signed-off-by: Andrew Page <admwiggin@gmail.com> (github: tianon)
2014-04-28 17:08:03 -06:00
Rohit Jnagal c44c51e3ce Merge branch 'master' into libcontainer-fixes
Conflicts:
	pkg/libcontainer/README.md
	pkg/libcontainer/container.json

Docker-DCO-1.1-Signed-off-by: Rohit Jnagal <jnagal@google.com> (github: rjnagal)
2014-04-28 23:04:04 +00:00
Victor Marmol 76f95294a3 Adding a unit test for pkg/cgroup/fs/memory.go
Docker-DCO-1.1-Signed-off-by: Victor Marmol <vmarmol@google.com> (github: vmarmol)
2014-04-28 22:58:25 +00:00
Tianon Gravi d98069030d Remove "root" and "" special cases in libcontainer
These are unnecessary since the user package handles these cases properly already (as evidenced by the LXC backend not having these special cases).

I also updated the errors returned to match the other libcontainer error messages in this same file.

Also, switching from Setresuid to Setuid directly isn't a problem, because the "setuid" system call will automatically do that if our own effective UID is root currently: (from `man 2 setuid`)

    setuid() sets the effective user ID of the calling process.  If the
    effective UID of the caller is root, the real UID and saved set-user-
    ID are also set.

Docker-DCO-1.1-Signed-off-by: Andrew Page <admwiggin@gmail.com> (github: tianon)
2014-04-28 16:46:03 -06:00
Victor Vieux af72ca199d Merge pull request #5136 from cpuguy83/5080_fix_empty_volume_perms
Fixes permissions on volumes when dir in container is empty
2014-04-28 14:36:02 -07:00
Brian Goff ff7b52abd3 Fixes permissions on volumes when dir in container is empty
Docker-DCO-1.1-Signed-off-by: Brian Goff <cpuguy83@gmail.com> (github: cpuguy83)
2014-04-28 16:57:28 -04:00
Tibor Vass e9a42a45bf Fixes #5152 : symlink in volume path
Docker-DCO-1.1-Signed-off-by: Tibor Vass <teabee89@gmail.com> (github: tiborvass)
2014-04-28 13:18:12 -07:00
James Turnbull a8871b93b9 Addressed regression of private repository documentation.
This adds back in the references to private repositories and
provides some refactoring to the Working with repositories
documentation including updating references to the "Central"
registry to Docker.io.

It also:

* Fixes some links and references to Central Index
* Fixes anchors in other files to updated titles in Working with Repositories.
* Renamed Central Index in the remaining places.
* Updated terms documentation to reflect Docker.io
* Updated some Docker Index naming to be consistent.
* Updates menu labels and hyperlinks.

Docker-DCO-1.1-Signed-off-by: James Turnbull <james@lovedthanlost.net> (github: jamtur01)
Docker-DCO-1.1-Signed-off-by: O.S. Tezer <ostezer@gmail.com> (github: ostezer)
2014-04-28 16:08:55 -04:00
Solomon Hykes d8332f433f Merge pull request #5422 from shykes/engine-spawn
engine/spawn: run an engine in a subprocess, remote-controlled by Beam
2014-04-28 12:56:02 -07:00
Michael Crosby b386f2f558 Merge pull request #5412 from vmarmol/add-blkio-test
Adding a test for blkio stats.
2014-04-28 12:50:20 -07:00
Michael Crosby 3c5bac0348 Merge pull request #5394 from vmarmol/add-croup-memory-stats
Add memory usage and max usage stats.
2014-04-28 12:44:34 -07:00
Victor Vieux 68d8d9a62d update message
Docker-DCO-1.1-Signed-off-by: Victor Vieux <victor.vieux@docker.com> (github: vieux)
2014-04-28 19:03:31 +00:00
Victor Vieux 78421b3768 docker rmi -f works with stopped containers + revamped error messages
Docker-DCO-1.1-Signed-off-by: Victor Vieux <victor.vieux@docker.com> (github: vieux)
2014-04-28 19:02:04 +00:00
Andy Goldstein bba1dd046d Docs fix: correct /commit info
Correct documentation for POST /commit to reflect that the container's
configuration is supplied in the request body, and not as a query
parameter.

Also correct a small typo in the example JSON for create container.

Docker-DCO-1.1-Signed-off-by: Andy Goldstein <agoldste@redhat.com> (github: ncdc)
2014-04-28 13:38:58 -04:00
Solomon Hykes 8fac9a345b Merge pull request #5431 from shykes/engine-len
engine.Len returns the number of keys in an env
2014-04-28 10:16:49 -07:00
O.S.Tezer abf3baf4eb Docs/CSS: Fix Notes/Warnings blocks' BG colour to improve its state.
Docs' BG was original "#fff" and blocks such as code blocks or
warning-notes blocks were coloured in #F2F2F2.

In order to make it easier to read everything, the BG colour was
changed to #fff. However, the switch missed to convert other blocks'
BG colour.

This commit aims to re-introduce the correct contrast by changing the
BG colour of warning/notes block to #fff.

Docker-DCO-1.1-Signed-off-by: O.S. Tezer <ostezer@gmail.com> (github: ostezer)
2014-04-28 19:02:50 +03:00
O.S.Tezer f334dbe82d Docs/CSS: Amend code block rendering.
This commit aims to improve the rendering of code blocks by
reducing the padding, matching the font-size with the rest of the
documentation text and finally, by changing the background colour
back to white from its current gray-ish state which matches the
background colour and making it really hard to spot the code.

Note: The BG colouring issue is due to converting the main BG
to gray whilst missing to change parts that where gray to white, i.e.,
not making the complete switch.

Docker-DCO-1.1-Signed-off-by: O.S. Tezer <ostezer@gmail.com> (github: ostezer)
2014-04-28 18:58:15 +03:00
O.S.Tezer 442b70c65a Docs/theme/MAINTAINERS: Modify/Update list of MAINTAINERS
So far it has been mostly my duty to create and maintain docs' design/theme.

This commit adds myself to the list of maintainers by modifying
the MAINTAINERS file under the docs/theme directory.

Docker-DCO-1.1-Signed-off-by: O.S. Tezer <ostezer@gmail.com> (github: ostezer)
2014-04-28 18:36:40 +03:00
O.S.Tezer b6699111db Docs/CSS fix: Aallow viewport expand to user's preference
This commit removes the "max-width" property of DOM "containers";
Thus letting the viewport to expand to fill the available space.

This commit aims to bring pleasure to Docker docs' readers' eyes,
And to make them happy by letting them profit more from their large
monitors. (or use more efficiently their smaller ones).

Docker-DCO-1.1-Signed-off-by: O.S. Tezer <ostezer@gmail.com> (github: ostezer)
2014-04-28 18:30:31 +03:00
unclejack 425b315695 Merge pull request #5199 from shin-/registry_mirrors_support
Added support for multiple endpoints in X-Docker-Endpoints header
2014-04-28 17:56:57 +03:00
James Turnbull 4155874443 Merge pull request #4576 from Soulou/4549-doc-kill-signal-param
Add missing 'signal' parameter for kill endpoint
2014-04-28 04:39:25 -04:00
Solomon Hykes 9b23178f58 engine.Len returns the number of keys in an env
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-28 00:37:42 -07:00
Solomon Hykes b4b83ef8ae engine/spawn: run an engine in a subprocess, remote-controlled by Beam
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-27 14:11:46 -07:00
Solomon Hykes 9236e088eb Fix bug in engine.Sender
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-27 14:11:45 -07:00
Solomon Hykes 62f4c88443 Merge pull request #5374 from shykes/beam-engine
Remote communication between engines using beam
2014-04-27 14:10:59 -07:00
O.S. Tezer 44c69c1d87 Merge pull request #5425 from jlhawn/io-auth-accounts-api-docs
Merged.
2014-04-27 21:40:03 +03:00
Josh Hawn c6060a3b25 Added back OAuth and Accounts API docs pages
Removed a now unused endpoint from the accounts API.
Updated some of the accounts links to point to www.docker.io
as the account signup and resend-email-confirmation links should
no longer point to the index.

Docker-DCO-1.1-Signed-off-by: Josh Hawn <josh.hawn@docker.com> (github: jlhawn)
2014-04-27 11:17:48 -07:00
Soulou 91deb591c8 [Documentation - API] Add missing 'signal' parameter for /containers/:id/kill endpoint
Docker-DCO-1.1-Signed-off-by: Leo Unbekandt <leo.unbekandt@appsdeck.eu> (github: Soulou)
2014-04-27 18:10:30 +01:00
Solomon Hykes e83fc70d36 Freeze ./integration and explain where to contribute new tests
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-26 18:55:39 -07:00
Sven Dowideit 40882cc0b6 Merge pull request #5417 from jamtur01/readme3
Fixed double backtick to single backtick formatting issue in README
2014-04-27 11:48:52 +10:00
Sven Dowideit 91cd60efd8 Merge pull request #5416 from jamtur01/dockerize
Fixed Dockerise to Dockerize
2014-04-27 11:48:27 +10:00
James Turnbull 723d314f09 Replaced all double backticks in README with singles
Docker-DCO-1.1-Signed-off-by: James Turnbull <james@lovedthanlost.net> (github: jamtur01)
2014-04-26 10:12:09 -04:00
James Turnbull df018bc801 Fixed Dockerise to Dockerize
Docker-DCO-1.1-Signed-off-by: James Turnbull <james@lovedthanlost.net> (github: jamtur01)
2014-04-26 09:48:07 -04:00
Sven Dowideit 3b279d0218 Merge pull request #5415 from jamtur01/readme2
Updated Docs README
2014-04-26 23:36:41 +10:00
James Turnbull 7744f63159 Updated Docs README
Docker-DCO-1.1-Signed-off-by: James Turnbull <james@lovedthanlost.net> (github: jamtur01)
2014-04-26 08:10:19 -04:00
Victor Marmol f4055ee2a4 Adding a test for blkio stats.
Also adds a test utility we can use for other cgroup tests.

Docker-DCO-1.1-Signed-off-by: Victor Marmol <vmarmol@google.com> (github: vmarmol)
2014-04-26 07:29:13 +00:00
unclejack 44140f7909 Merge pull request #5411 from crosbymichael/lockdown
Update default restrictions for exec drivers
2014-04-26 03:27:56 +03:00
Solomon Hykes 4701f8ee60 Merge pull request #5365 from crosbymichael/job-status
Add exported status code from a job
2014-04-25 17:27:07 -07:00
Solomon Hykes 7e3624a498 engine: 'rengine' is a small command-line utility to debug remote engine
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-25 17:23:47 -07:00
Solomon Hykes b63b98ee27 engine.Sender and engine.Receiver support stdin
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-25 17:23:47 -07:00
Solomon Hykes 3c1d5ca33e Remote communication between engines using beam
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-25 17:23:47 -07:00
Solomon Hykes 68d3e75750 engine: allow registering a "catchall" handler which receives all commands
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-25 17:23:16 -07:00
Solomon Hykes 9422451ac3 engine.Installer: a standard interface for "installable" services
Installer is a standard interface for objects which can "install"
themselves an engine by registering handlers.

This can be used as an entrypoint for external plugins etc.

Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-25 17:23:16 -07:00
Vincent Batts 7790a77b6a static_registry: update the test for the new struct
Docker-DCO-1.1-Signed-off-by: Vincent Batts <vbatts@redhat.com> (github: vbatts)
2014-04-25 20:01:25 -04:00
Rohit Jnagal 8cdb720d26 Updated sample config to be usable. We should change the namespace
config to not need "value" later.

Docker-DCO-1.1-Signed-off-by: Rohit Jnagal <jnagal@google.com> (github: rjnagal)
2014-04-25 21:10:23 +00:00
unclejack 077b7d0359 Merge pull request #5342 from danielnorberg/avoid-suicide
avoid suicide
2014-04-25 21:44:45 +03:00
James Turnbull ed48608147 Merge pull request #5401 from SvenDowideit/docs-api-eg-formating
small api doc formatting fixup
2014-04-25 09:11:46 -04:00
Sven Dowideit c7bd1f4e64 small api doc formatting fixup
Docker-DCO-1.1-Signed-off-by: Sven Dowideit <SvenDowideit@fosiki.com> (github: SvenDowideit)
2014-04-25 20:36:31 +10:00
Rohit Jnagal 24f978094d Updated sample config and README to match the default template for
native execdriver.

Docker-DCO-1.1-Signed-off-by: Rohit Jnagal <jnagal@google.com> (github: rjnagal)
2014-04-25 06:02:30 +00:00
Victor Marmol ad924959a9 Add memory usage and max usage stats.
Docker-DCO-1.1-Signed-off-by: Victor Marmol <vmarmol@google.com> (github: vmarmol)
2014-04-25 02:51:28 +00:00
Rohit Jnagal 580c2620e7 Improved README formatting.
Docker-DCO-1.1-Signed-off-by: Rohit Jnagal <jnagal@google.com> (github: rjnagal)
2014-04-25 01:23:48 +00:00
Rohit Jnagal 569b234135 Add enabled option to namespaces and capabilities spec in
container.json. Although we don't yet check for enabled everywhere.

Docker-DCO-1.1-Signed-off-by: Rohit Jnagal <jnagal@google.com> (github: rjnagal)
2014-04-25 01:10:11 +00:00
Rohit Jnagal 0aacca3ae6 Fix typos in nsinit logs.
Docker-DCO-1.1-Signed-off-by: Rohit Jnagal <jnagal@google.com> (github: rjnagal)
2014-04-25 00:20:14 +00:00
Rohit Jnagal 14b2a9de87 Fix container.json sample to be loadable by nsinit.
Docker-DCO-1.1-Signed-off-by: Rohit Jnagal <jnagal@google.com> (github: rjnagal)
2014-04-25 00:17:45 +00:00
James Turnbull a368c0dd50 Merge pull request #5355 from SvenDowideit/doc-ubuntu-14-04-lts
initial version of installation on ubuntu 14.04 LTS
2014-04-24 20:06:08 -04:00
Sven Dowideit b3bea07d56 Merge pull request #5371 from ostezer/docs-add-docs-versioning-files-to-gitignore
Docs: Add docs new version files created by `make docs` to .gitignore
2014-04-25 09:08:43 +10:00
Sven Dowideit 1083b6d2ec Merge pull request #5372 from SvenDowideit/docs-tweaks-to-socket-options
Docs tweaks to socket options
2014-04-25 09:08:22 +10:00
Sven Dowideit 7f64210e9e Merge pull request #5378 from ostezer/docs-fix-stray-url-from-warning
Fix stray url from beta-docs warning (remove aws bucket URI)
2014-04-25 09:07:58 +10:00
Guillaume J. Charmes 85540f6aa0 Merge pull request #5373 from vmarmol/master
Separating cgroup Memory and MemoryReservation.
2014-04-24 14:28:40 -07:00
Michael Crosby 8af84c5e23 Merge pull request #5335 from alexlarsson/remove-ghost
container: Remove Ghost state
2014-04-24 11:55:05 -07:00
Victor Marmol f188b9f623 Separating cgroup Memory and MemoryReservation.
This will allow for these to be set independently. Keep the current Docker behavior where Memory and MemoryReservation are set to the value of Memory.

Docker-DCO-1.1-Signed-off-by: Victor Marmol <vmarmol@google.com> (github: vmarmol)
2014-04-24 11:09:38 -07:00
Michael Crosby d5c9f61ecc Ignore isnot exists errors for proc paths
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-24 10:35:20 -07:00
Michael Crosby fa5cabf9fe Update init for new apparmor import path
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-24 10:35:20 -07:00
Michael Crosby 90678b3133 Update create with apparmor import
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-24 10:35:20 -07:00
Michael Crosby 2d31aeb911 Update container.json and readme
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-24 10:35:20 -07:00
Michael Crosby 2d6c367434 Increment native driver version with these changes
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-24 10:35:20 -07:00
Michael Crosby 7a0b361066 Move capabilities into security pkg
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-24 10:35:20 -07:00
Michael Crosby 156987c118 Move mounts into types.go
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-24 10:35:20 -07:00
Michael Crosby a949d39f19 Move rest of console functions to pkg
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-24 10:35:20 -07:00
Michael Crosby 05b611574f Refactor mounts into pkg to make changes easier
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-24 10:35:20 -07:00
Michael Crosby de3d51b0a8 Move console into its own package
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-24 10:35:20 -07:00
Michael Crosby 5ba1242bdc Mount over dev and only copy allowed nodes in
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-24 10:35:20 -07:00
Michael Crosby 81e5026a6a No not mount sysfs by default for non privilged containers
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-24 10:35:20 -07:00
Michael Crosby 0779a8c328 Add lxc support for restricting proc
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-24 10:35:20 -07:00
Michael Crosby 60a90970bc Add restrictions to proc in libcontainer
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-24 10:35:19 -07:00
Michael Crosby d26ea78e42 Move apparmor into security sub dir
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-24 10:35:19 -07:00
Michael Crosby 4ed165210f Merge pull request #5381 from rjnagal/master
Add support for cpu hardcapping to cgroups.
2014-04-24 10:04:17 -07:00
Guillaume J. Charmes 56b779c321 Merge pull request #5356 from alexlarsson/devmapper-no-mount-in-create
devicemapper: Don't mount in Create()
2014-04-24 08:19:59 -07:00
Rohit Jnagal 264dc8a46b Add support for cpu hardcapping to cgroups.
Docker-DCO-1.1-Signed-off-by: Rohit Jnagal <jnagal@google.com> (github: rjnagal)
2014-04-24 14:43:02 +00:00
O.S.Tezer 5e5230cb19 Fix stray url from beta-docs warning (remove aws bucket URI)
Docker-DCO-1.1-Signed-off-by: O.S. Tezer <ostezer@gmail.com> (github: ostezer)
2014-04-24 16:29:12 +03:00
Sven Dowideit da8f6ffdeb initial version of installation on ubuntu 14.04 LTS
Docker-DCO-1.1-Signed-off-by: Sven Dowideit <SvenDowideit@home.org.au> (github: SvenDowideit)
2014-04-24 22:59:59 +10:00
O.S. Tezer df20a0e7a3 Merge pull request #5377 from SvenDowideit/fix-terms-links
Merged.
2014-04-24 15:42:10 +03:00
Sven Dowideit ada86fc5b7 Looking into some broken links, I noticed that we don't need to use
relative paths, and also fixed some broken images.

There are still more todo - next PR I think :)

Docker-DCO-1.1-Signed-off-by: Sven Dowideit <SvenDowideit@fosiki.com> (github: SvenDowideit)
2014-04-24 22:20:04 +10:00
O.S.Tezer c932667cd2 Docs auto-conversion fixes and MD marking and structure improvements.
- Remove redundant chars and all errors caused by RST->MD conversion.
   e.g. [/#, /\, \<, />, etc.]
 - Fix broken inter-document links
 - Fix outbound links no-longer active or changed
 - Fix lists
 - Fix code blocks
 - Correct apostrophes
 - Replace redundant inline note marks for code with code marks
 - Fix broken image links
 - Remove non-functional title links
 - Correct broken cross-docs links
 - Improve readability

Note: This PR does not try to fix/amend:

 - Grammatical errors
 - Lexical errors
 - Linguistic-logic errors etc.

It just aims to fix main structural or conversion errors to serve as
a base for further amendments that will cover others including but
not limited to those mentioned above.

Docker-DCO-1.1-Signed-off-by: O.S. Tezer <ostezer@gmail.com> (github: ostezer)

Update:

 - Fix backtick issues

Docker-DCO-1.1-Signed-off-by: Sven Dowideit <SvenDowideit@home.org.au> (github: SvenDowideit)
2014-04-24 22:19:32 +10:00
O.S.Tezer d9f9021e9b Docs: Add docs new version files created by make docs to .gitignore
Files are:

 - docs/AWS_S3_BUCKET
 - docs/GIT_BRANCH
 - docs/VERSION

Docker-DCO-1.1-Signed-off-by: O.S. Tezer <ostezer@gmail.com> (github: ostezer)

Update:

 - Remove unnecessary last blankline
2014-04-24 13:33:00 +03:00
James Turnbull 83b388c979 Merge pull request #5362 from sindhus/patch-2
Update link to interactive tutorial
2014-04-24 00:22:04 -04:00
Sven Dowideit b2c87fe08b add a reference to multiple -H options, and update the other example of -H option
and copy changes to the cli.md file

Docker-DCO-1.1-Signed-off-by: Sven Dowideit <SvenDowideit@fosiki.com> (github: SvenDowideit)
2014-04-24 11:24:58 +10:00
Mike MacCana e62efb266f - unix://path/to/socket should read unix:///path/to/socket like the rest of the documentation (a slash was missing)
- Mention that [] options may be specified multiple times on the Usage page

Docker-DCO-1.1-Signed-off-by: Mike MacCana <mike.maccana@gmail.com> (github: mikemaccana)

Docker-DCO-1.1-Signed-off-by: Mike MacCana <mike.maccana@gmail.com> (github: SvenDowideit)
2014-04-24 11:11:51 +10:00
Sven Dowideit 0ade0af27e Merge pull request #5349 from ipbabble/manpages
Manpages - fixes and merged tianon/docker man1-assumption branch
2014-04-24 09:43:42 +10:00
Solomon Hykes 0fe48b0e59 Merge pull request #5345 from shykes/engine-installer
engine.Installer: a standard interface for "installable" services
2014-04-23 16:16:55 -07:00
Guillaume J. Charmes baf6cf9056 Merge pull request #5347 from crosbymichael/engine-root
Remove root dir from engine
2014-04-23 13:53:08 -07:00
Michael Crosby f90029611f Add exported status code from a job
This allows the job's status code to be consumed externally so that we
can use it as an exit code or saving to a state file.
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-23 13:47:56 -07:00
Sindhu S 81477a204f Update link to interactive tutorial 2014-04-24 01:59:52 +05:30
Sindhu S 6e6b8b69cd Update link to interactive tutorial 2014-04-24 01:02:54 +05:30
Michael Crosby 7100ace42b Remove error from engine.New()
Without creating a root there is no way for the engine to return an
error from the new function.
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-23 11:54:35 -07:00
Tianon Gravi 6b0f0af0e9 Merge pull request #5336 from tianon/slightly-more-organized-check-config
Move "possible config locations" list to the top of check-config.sh
2014-04-23 11:21:08 -06:00
Daniel Norberg b3ddc31b95 avoid suicide
container.Kill() might read a pid of 0 from
container.State.Pid due to losing a race with
container.monitor() calling
container.State.SetStopped(). Sending a SIGKILL to
pid 0 is undesirable as "If pid equals 0, then sig
is sent to every process in the process group of
the calling process."

Docker-DCO-1.1-Signed-off-by: Daniel Norberg <daniel.norberg@gmail.com> (github: danielnorberg)
2014-04-23 11:06:59 -04:00
James Turnbull 03aacc4b91 Merge pull request #5351 from SvenDowideit/docs-conditional-beta-warning
Docs conditional beta warning
2014-04-23 08:55:08 -04:00
Alexander Larsson 73d9ede12c devicemapper: Don't mount in Create()
We used to mount in Create() to be able to create a few files that
needs to be in each device. However, this mount is problematic for
selinux, as we need to set the mount label at mount-time, and it
is not known at the time of Create().

This change just moves the file creation to first Get() call and
drops the mount from Create(). Additionally, this lets us remove
some complexities we had to avoid an extra unmount+mount cycle.

Docker-DCO-1.1-Signed-off-by: Alexander Larsson <alexl@redhat.com> (github: alexlarsson)
2014-04-23 13:50:53 +02:00
Sven Dowideit f436c744da Merge pull request #5337 from tianon/man1-assumption
Update contributed man page file names and compilation script
2014-04-23 21:10:01 +10:00
Sven Dowideit dc982d3053 make the non-release doc warning conditional and add version info
use the beta-warning area to tell the user what VERSION of docker, git
branch, and links to the official release version docs are.

requires / extends PR #5272

Docker-DCO-1.1-Signed-off-by: Sven Dowideit <SvenDowideit@fosiki.com> (github: SvenDowideit)
2014-04-23 21:07:12 +10:00
O.S.Tezer 9d38fd0eef Development docs warning for beta-docs.docker.io
Update: Fix alignment issues of the "warning" block.

Docker-DCO-1.1-Signed-off-by: O.S. Tezer <ostezer@gmail.com> (github: ostezer)

Docker-DCO-1.1-Signed-off-by: O.S.Tezer <ostezer@gmail.com> (github: SvenDowideit)
2014-04-23 21:07:11 +10:00
O.S. Tezer a99d0c7136 Merge pull request #5352 from rmoriz/patch-1
Merged.
2014-04-23 12:42:41 +03:00
Roland Moriz 086b3208ea fixed broken link to chef community site 2014-04-23 09:17:57 +02:00
William Henry a6fd2c237e Fixed some missing ']' and the TAG
Docker-DCO-1.1-Signed-off-by: William Henry <whenry@redhat.com> (github: ipbabble)

 Changes to be committed:
	modified:   contrib/man/md/docker-build.1.md
2014-04-22 22:35:59 -06:00
William Henry 687653e599 Merge branch 'man1-assumption' of https://github.com/tianon/docker into manpages 2014-04-22 22:21:39 -06:00
William Henry a5b4a90748 Fixed an missing '-' on the "--rm"
Docker-DCO-1.1-Signed-off-by: William Henry <whenry@redhat.com> (github: ipbabble)

 Changes to be committed:
	modified:   contrib/man/md/docker-build.md
2014-04-22 22:17:33 -06:00
Michael Crosby 87e8d7754e Update tests with engine root removal
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-22 19:24:47 -07:00
Tianon Gravi 96588fb85d Merge pull request #5346 from SvenDowideit/dont-alocate-port-for-docs-release
Remove port allocation from `make docs-release`
2014-04-22 20:15:18 -06:00
Michael Crosby 672edfe807 Remove the concept of a root dir out of engine
This makes the engine more general purpose so that we can
use it and the job routing functionality for reexec'ing our binary
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)

Conflicts:
	integration/runtime_test.go
2014-04-22 19:04:03 -07:00
Sven Dowideit e0af429a2a don't try allocating a port to upload a docs release to s3
Docker-DCO-1.1-Signed-off-by: Sven Dowideit <SvenDowideit@fosiki.com> (github: SvenDowideit)
2014-04-23 11:59:16 +10:00
Victor Vieux 817494d009 Merge pull request #5343 from shykes/beamsh
beam + beam/data + dockerscript
2014-04-22 17:01:05 -07:00
Solomon Hykes 4353f25e10 engine.Installer: a standard interface for "installable" services
Installer is a standard interface for objects which can "install"
themselves an engine by registering handlers.

This can be used as an entrypoint for external plugins etc.

Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 16:51:06 -07:00
Solomon Hykes bf51f36d8f Fix Go formatting in beam and dockerscript
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 16:16:29 -07:00
Solomon Hykes 0bf2109121 pkg/dockerscript: add MAINTAINERS file
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:24 -07:00
Solomon Hykes bc6303f15d beam/examples/beamsh: 'chdir' changes the current directory
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:24 -07:00
Solomon Hykes 6ce4d2c842 beam/examples/beamsh: 'exec' can communicate with its child via beam.
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:24 -07:00
Solomon Hykes 271ba18043 beam/examples/beamsh: use beam.Router to simplify 'multiprint' and fix job passthrough
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:23 -07:00
Solomon Hykes 0d08d36bf5 beam: new routing functions Route.KeyEquals, Route.KeyIncludes, Route.NoKey
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:23 -07:00
Solomon Hykes 30424f4e3a beam/examples/beamsh: use beam.Router to simplify 'trace'
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:23 -07:00
Solomon Hykes d3df4b5baf beam/examples/beamsh: move builtins to a separate file for readability
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:23 -07:00
Solomon Hykes 0822d67b2d beam/examples/beamsh: simplify commands by always creating and sending stdout and stderr for them
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:23 -07:00
Solomon Hykes 63fd2ec0f7 beam/examples/beamsh: use beam.Router to simplify 'logger'
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:23 -07:00
Solomon Hykes 9206b18818 beam/examples/beamsh: use beam.Router to simplify the 'stdio' command
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:23 -07:00
Solomon Hykes 8f5435e80c beam: Router can route beam messages with a convenient set of rules and handlers
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:23 -07:00
Solomon Hykes 40b4f86eab beam/examples/beamsh: move example scripts to scripts/
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:22 -07:00
Alexander Larsson 1fb0bf1b3b beam: Fix double close of fds in SendUnix
Instead of calling syscall.Close() on the fds in sendUnix() we call
Close() on the *os.File in Send(). Otherwise the fd will be closed, but
the *os.File will continue to live, and when it is finalized the
fd will be closed (which by then may be reused and can be anything).

This also adds a note to Send() the the file is closed.

Docker-DCO-1.1-Signed-off-by: Alexander Larsson <alexl@redhat.com> (github: alexlarsson)
2014-04-22 15:50:22 -07:00
Solomon Hykes a88d8d678b beam: more unit tests
This adds testing to SendConn.

Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:22 -07:00
Solomon Hykes 06df94d55b beam/examples/beamsh: add scripts to reproduce various bugs
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:22 -07:00
Solomon Hykes d0ca66dded beam/examples/beamsh: fix 'print' to be pass-through
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:22 -07:00
Solomon Hykes b97375fc29 beam/examples/beamsh: rename 'log' to 'logger' to avoid conflict with stdout/stderr
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:22 -07:00
Solomon Hykes a2b88b4915 beam/examples/beamsh: 'prompt' asks the user for a value and sends it.
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:22 -07:00
Solomon Hykes ed62ca5b2f beam/examples/beamsh: commands are messages.
Commands in the pipeline should either implement or pass-through command messages.

This amounts to a proof-of-concept implementation of the "pipeline"
design of Docker plugins.

Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:22 -07:00
Solomon Hykes 2f4b8b7e8d beam/examples/beamsh: cosmetic fix in Fatalf
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:22 -07:00
Solomon Hykes 4f92ffb500 beam: replace SendPair() with the simpler SendConn()
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:21 -07:00
Solomon Hykes 5833e78887 beam/examples/beamsh: miniserver.ds demo
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:21 -07:00
Solomon Hykes 70d3262161 beam: improve the API with Sender/Receiver interfaces and utilities: Copy/SendPipe/SendPair
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:21 -07:00
Alexander Larsson b0228d94be beam: Make extracted Fds CloseOnExec
Grab forklock to make sure no forks accidentally inherit the new fds
before they are made CLOEXEC There is a slight race condition between
ReadMsgUnix returns and when we grap the lock, so this is not
perfect. Unfortunately There is no way to pass MSG_CMSG_CLOEXEC to
recvmsg() nor any way to implement non-blocking i/o in go, so this is
hard to fix.

Docker-DCO-1.1-Signed-off-by: Alexander Larsson <alexl@redhat.com> (github: alexlarsson)
2014-04-22 15:50:21 -07:00
Solomon Hykes 207e604bad beam/examples/beamsh: add a few example dockerscripts
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:21 -07:00
Solomon Hykes 29ddf2be1e beam/examples/beamsh: simplify code by using sendWPipe utility
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:21 -07:00
Solomon Hykes 1dc449e11d beam/examples/beamsh: move code around for readability
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:21 -07:00
Solomon Hykes 3a2b31a30b beam/examples/beamsh: 'exec' adds 'fromcmd' field to its output
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:21 -07:00
Solomon Hykes 7534f7a34b beam/examples/beamsh: simple 'log' command tees streams to a local directory
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:21 -07:00
Solomon Hykes 4f5b94d369 beam/examples/beamsh: 'render' and 'beamsh -x'
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:20 -07:00
Solomon Hykes 4ebe7aab91 beam/examples/beamsh: run commands in an implicit context of pre-loaded 'plugins'
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:20 -07:00
Solomon Hykes cd85af06fe beam/examples/beamsh: convenience commands 'devnull', 'echo' and 'stdio'
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:20 -07:00
Solomon Hykes 6d9cdbf24f beam/examples/beamsh: 'emit' supports key=value syntax to compose arbitrary objects
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:20 -07:00
Solomon Hykes 2b81fb8424 dockerscript: '=' is not a special character
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:20 -07:00
Solomon Hykes 6e0a156d90 beam/examples/beamsh: support for background commands with '&' terminator
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:20 -07:00
Solomon Hykes 08686f1d21 beam/data: Message.Parse creates a message from shell-style 'key=value' arguments
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:20 -07:00
Solomon Hykes ffe19414b1 dockerscript: support '#' line comments
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:20 -07:00
Solomon Hykes e1c8dbba97 beam/examples/beamsh: scripts can be passed as filenames
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:20 -07:00
Solomon Hykes 222fc87ade beam/examples/beamsh: remote communication over beam (experimental).
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:20 -07:00
Solomon Hykes 371f6fc63d beam/examples/beamsh: 'in' chdirs to a directory. 'pass' does simple passthrough
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:19 -07:00
Solomon Hykes 6d5c75a224 beam/examples/beamsh: 'beamsend' command serializes all messages and sends them over a network connection
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:19 -07:00
Solomon Hykes 5ddf673851 beam/examples/beamsh: 'exec' command correctly closes stdout and stderr when the process exists
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:19 -07:00
Solomon Hykes e512fef425 beam/examples/beamsh: don't print discarded messages in Devnull
This avoids false alarms when process exits without printing. Devnull
doesn't require synchronization.

Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:19 -07:00
Solomon Hykes 34c5724b89 beam/examples/beamsh: more useful debugging
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:19 -07:00
Solomon Hykes a5bc75d406 beam/data: expose EncodeString for convenience access to the underlying netstring primitive
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:19 -07:00
Solomon Hykes fb1af1f0bc beam/examples/beamsh: utility function 'fileToConn'
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:19 -07:00
Solomon Hykes 74b90c25d9 beam/examples/beamsh: 'connect' command
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:19 -07:00
Solomon Hykes dff9854305 beam/examples/beamsh: 'exec' and 'listen' commands
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:19 -07:00
Solomon Hykes 3686d50429 beam/examples/beamsh: prettier devnull
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:18 -07:00
Solomon Hykes c9b8e0fcac beam/data: prettier Message.Pretty()
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:18 -07:00
Solomon Hykes d7a2ae8e13 beam/examples/beamsh: prettier 'trace' command
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:18 -07:00
Solomon Hykes eca6fecb59 beam/data: convenience Message.Pretty() function
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:18 -07:00
Solomon Hykes d4920b3fff beam/examples/beamsh: basic implementation of the pipeline design, with static handlers for now.
In the pipeline design, several beam commands can be run concurrently,
with their respective inputs and outputs connected in such a way that
beam messages flow from the first to last. This is similar to the way
a unix shell executes commands in a pipeline: instead of STDIN and
STDOUT, each beam command has a "BEAMIN" and "BEAMOUT".

Since beam allows for richer communication than plain byte streams, beam
pipelines can express more powerful computation, while retaining the
fundamental elegance and ease of use of unix-style composition.

Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:18 -07:00
Solomon Hykes ec288895e5 beam/examples/beamsh: better debugging messages
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:18 -07:00
Solomon Hykes ab2010cfd3 beam/examples/beamsh: simple 'exec' command
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:18 -07:00
Solomon Hykes 5689792171 beam/examples/beamsh: catch introspection calls from jobs for proper nesting
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:18 -07:00
Solomon Hykes bcd31405cf beam: fix FD leaks in SendPipe
This fixes file descriptor leaks in the SendPipe function.

Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:18 -07:00
Solomon Hykes 1737063904 beam: more hooks for interactive debugging
This inserts low-level hooks for interactive step-by-step debugging.
Hooks are triggered by setting the *TEST* environment variable.

This is particularly useful for tracking down file descriptor leaks,
double-closing, or other issues which are difficult to debug with
the usual toolbox.

Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:17 -07:00
Solomon Hykes 6072dec9e7 beam/examples/beamsh: first try at nested execution
The "wiring" is broken because engine does not keep a reference for handling introspection calls.

Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:17 -07:00
Solomon Hykes 8697490740 beam/examples/beamsh: fix a bug in the log command
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:17 -07:00
Solomon Hykes 488fe61354 beam/data: convenience Message.Get
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:17 -07:00
Solomon Hykes 460c98d92d beam/examples/beamsh: use beam/data
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:17 -07:00
Solomon Hykes 5bcf2a736c beam/data: Message.Bytes() convenience method
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:17 -07:00
Solomon Hykes 99dda11d45 beam/data: fix a bug in encoding of multi-value maps
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:17 -07:00
Solomon Hykes 276fb1918d beam/data: convenience Message type for chained manipulation
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:17 -07:00
Solomon Hykes 916372c76f Beam: remove leftover debugging messages
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:17 -07:00
Solomon Hykes cb66e8c136 beam/examples/beamsh: hide debug messages in examples/beamsh by default
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:17 -07:00
Solomon Hykes 97a2c0ebe6 beam/data: a simple format for sending structured data over beam
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:16 -07:00
Solomon Hykes 771e493457 beam/examples/beamsh: more bells and whistles for demos
* Automatically switch to interactive mode when stdin is a terminal

* Basic implementation of "responses"

Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:16 -07:00
Solomon Hykes 851c1b05d0 Beam: fix bug in beamsh which 'swapped' FDs because of underlying implementation of net.FileConn
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:16 -07:00
Solomon Hykes 4481e80636 pkg/dockerscript: <!> is not a special character
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:16 -07:00
Solomon Hykes 07c03944ff Beam: don't close the attachment FD when closing superfluous FDs
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:16 -07:00
Solomon Hykes 8875cdf561 Beam: debugging hooks for easy step-by-step inspection of the FD table
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:16 -07:00
Solomon Hykes f586dcf307 beam/examples/beamsh: use 'log' command to pass stdout
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:16 -07:00
Solomon Hykes d00a6b7648 beam/examples/beamsh: basic execution of commands, with in-process beam and dummy handlers
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:16 -07:00
Solomon Hykes f0933a91b0 pkg/dockerscript: remove debug messages
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:16 -07:00
Solomon Hykes 5c14c3ada5 pkg/dockerscript: '.' is not a special character
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:15 -07:00
Solomon Hykes f94a18677a Beam: Send: pass the underlying error unchanged to allow io.EOF detection
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:15 -07:00
Solomon Hykes 11f2531da6 pkg/dockerscript: expose a simple, clean API with a single Parse method
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:15 -07:00
Solomon Hykes 7f00a3b665 beam/examples/beamsh: correctly parse nested commands
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:15 -07:00
Solomon Hykes fd890136a9 dockerscript: patch text/scanner to use a shell-like syntax instead of the default go-like syntax
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:15 -07:00
Solomon Hykes cd8ddacdc7 pkg/dockerscript: a simple shell-like syntax to express docker operations
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:15 -07:00
Solomon Hykes be470f2497 Beam: beamsh is a mini-shell which runs processes and communicates with them over beam
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:15 -07:00
Solomon Hykes 0e42c7d889 Beam: basic test harness for the unix socket implementation.
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:15 -07:00
Solomon Hykes 59853c188d Beam: USocketPair returns a *net.UnixConn socket pair for convenience.
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:15 -07:00
Solomon Hykes c401c43cae Beam: fix file descriptor leaks
* Close all file descriptors successfully sent as attachment
* Close duplicate file descriptors created by net.FileCon and net.UnixConn.File

Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:15 -07:00
Solomon Hykes b637e5f04a Beam: change the prototype of SendPipe() to return a *net.UnixSocket
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:14 -07:00
Solomon Hykes 188c2ef806 Beam: allow sending messages without attachments.
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:14 -07:00
Solomon Hykes 3960da04c8 Beam: convenience functions Listen and Connect
These convenience functions expose a familiar face to the unknown and bizarre world of beam networking.

Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:14 -07:00
Solomon Hykes 5957e6b385 Beam: a simple stream-oriented communication protocol for distributed systems.
This patch includes a stripped down implementation with a bare minimum
unix socket transport. It relies on fd passing for stream multiplexing.

The purpose of this first patch is to allow implementation of dynamic
linking, which will allow advanced service discovery.

Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-22 15:50:14 -07:00
Tianon Gravi f763075c74 Update contributed man page file names and compilation script for the eventual possibility of non-man1 man pages (hopefully a Dockerfile.5.md, for example)
Docker-DCO-1.1-Signed-off-by: Andrew Page <admwiggin@gmail.com> (github: tianon)
2014-04-22 06:43:08 -06:00
Tianon Gravi 2c4cebe916 Move "possible config locations" list to the top of check-config.sh
Docker-DCO-1.1-Signed-off-by: Andrew Page <admwiggin@gmail.com> (github: tianon)
2014-04-22 06:26:44 -06:00
Alexander Larsson cf997aa905 container: Remove Ghost state
container.Register() checks both IsRunning() and IsGhost(), but at
this point IsGhost() is always true if IsRunning() is true. For a
newly created container both are false, and for a restored-from-disk
container Daemon.load() sets Ghost to true if IsRunning is true. So we
just drop the IsGhost check.

This was the last call to IsGhost, so we remove It and all other
traces of the ghost state.

Docker-DCO-1.1-Signed-off-by: Alexander Larsson <alexl@redhat.com> (github: alexlarsson)
2014-04-22 09:49:53 +02:00
Sven Dowideit ba11de9efa Merge pull request #5205 from ipbabble/manpages
Completed the manual paged in Markdown. rm old man pages.
2014-04-22 14:48:53 +10:00
Guillaume J. Charmes e630d9ea24 Merge pull request #5331 from shykes/cleanup-maintainers
Clean up MAINTAINERS files
2014-04-21 18:18:39 -07:00
Solomon Hykes 19e6614eeb Clean up MAINTAINERS files
* Remove out of date "vacation mode"
* Fix my email address
* Remove infrastructure maintainers to reflect reality (core maintainers
are currently maintaining their own infrastructure).

Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-21 18:17:13 -07:00
Solomon Hykes 7b1337a17f Merge pull request #5334 from shykes/freeze-server
Freeze server/server.go for deprecation
2014-04-21 18:16:40 -07:00
Solomon Hykes 8bcbc9fe99 Freeze server/server.go for deprecation
* Add notice in server/server.go explaining not to add stuff there, and
what to do instead.

* Make myself a sole maintainer of server/ to avoid concurrent edits
while refactoring.

Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-21 17:51:41 -07:00
O.S. Tezer e828d91197 Merge pull request #5323 from Lance0312/docs-missing-blank-lines
Merged.
2014-04-22 02:55:44 +03:00
Guillaume J. Charmes 7816712457 Merge pull request #5328 from crosbymichael/refactor-cgroups
Refactor cgroups into subsystems and support metrics
2014-04-21 14:06:17 -07:00
William Henry ac8c705c95 Changed Image to image.
Docker-DCO-1.1-Signed-off-by: William Henry <whenry@redhat.com> (github: ipbabble)

 Changes to be committed:
	modified:   contrib/man/md/README.md
2014-04-21 14:37:08 -06:00
William Henry 73257a72ea Further edtis based on comments.
Docker-DCO-1.1-Signed-off-by: William Henry <whenry@redhat.com> (github: ipbabble)

 Changes to be committed:
	modified:   contrib/man/md/README.md
	modified:   contrib/man/md/docker-build.md
	modified:   contrib/man/md/docker-cp.md
	modified:   contrib/man/md/docker-logs.md
	modified:   contrib/man/md/docker-push.md
2014-04-21 14:28:25 -06:00
unclejack c0d5eac120 Merge pull request #5223 from crosbymichael/load-profile
Use apparmor parser directly
2014-04-21 21:50:59 +03:00
William Henry bbde4298a5 Edits based on Sven's comments.
Docker-DCO-1.1-Signed-off-by: William Henry <whenry@redhat.com> (github: ipbabble)

 Changes to be committed:
	modified:   contrib/man/md/docker-build.md
	modified:   contrib/man/md/docker-commit.md
2014-04-21 11:55:06 -06:00
William Henry 7922e67870 Fixed a sentence for ostezer.
Docker-DCO-1.1-Signed-off-by: William Henry <whenry@redhat.com> (github: ipbabble)

	modified:   contrib/man/md/README.md
2014-04-21 10:42:46 -07:00
William Henry 95c311c8b4 Made some edits and removed the alternative, manual generation instructions.
Docker-DCO-1.1-Signed-off-by: William Henry <whenry@redhat.com> (github: ipbabble)

 Changes to be committed:
	modified:   contrib/man/md/README.md
2014-04-21 10:42:46 -07:00
William Henry 1b2b783b52 Edits based on ostezer's feedback.
Docker-DCO-1.1-Signed-off-by: William Henry <whenry@redhat.com> (github: ipbabble)
2014-04-21 10:42:46 -07:00
Tianon Gravi e55ed741c2 Update hack/make/ubuntu to use the new markdown-based manpages
This also removes all the old man pages, .gitignores their directory, and updates the md2man-all.sh script to be easier to read and more friendly to being called within hack/make/ubuntu.

Docker-DCO-1.1-Signed-off-by: Andrew Page <admwiggin@gmail.com> (github: tianon)
2014-04-21 10:42:46 -07:00
William Henry 67a73917c1 Added a tag to FROM fedora (fedora:20)
Docker-DCO-1.1-Signed-off-by: William Henry <whenry@redhat.com> (github: ipbabble)
2014-04-21 10:42:46 -07:00
William Henry 0a0dd11632 Created all manual pages in Markdown. Container for conversion.
Docker-DCO-1.1-Signed-off-by: William Henry <whenry@redhat.com> (github: ipbabble)

All Docker commands have a Markdown page.
Dockerfile used to build a Fedora based pandoc container.
md2man-all.sh is used inside the container.
README.sh includes an explaination on how to build the fedora/pandoc
          image and how to run the container directly.

 Changes to be committed:
	new file:   contrib/man/md/Dockerfile
	new file:   contrib/man/md/README.md
	new file:   contrib/man/md/docker-attach.md
	new file:   contrib/man/md/docker-build.md
	new file:   contrib/man/md/docker-commit.md
	new file:   contrib/man/md/docker-cp.md
	new file:   contrib/man/md/docker-diff.md
	new file:   contrib/man/md/docker-events.md
	new file:   contrib/man/md/docker-export.md
	new file:   contrib/man/md/docker-history.md
	new file:   contrib/man/md/docker-images.md
	new file:   contrib/man/md/docker-import.md
	new file:   contrib/man/md/docker-info.md
	new file:   contrib/man/md/docker-inspect.md
	new file:   contrib/man/md/docker-kill.md
	new file:   contrib/man/md/docker-load.md
	new file:   contrib/man/md/docker-login.md
	new file:   contrib/man/md/docker-logs.md
	new file:   contrib/man/md/docker-port.md
	new file:   contrib/man/md/docker-ps.md
	new file:   contrib/man/md/docker-pull.md
	new file:   contrib/man/md/docker-push.md
	new file:   contrib/man/md/docker-restart.md
	new file:   contrib/man/md/docker-rm.md
	new file:   contrib/man/md/docker-rmi.md
	new file:   contrib/man/md/docker-run.md
	new file:   contrib/man/md/docker-save.md
	new file:   contrib/man/md/docker-search.md
	new file:   contrib/man/md/docker-start.md
	new file:   contrib/man/md/docker-stop.md
	new file:   contrib/man/md/docker-tag.md
	new file:   contrib/man/md/docker-top.md
	new file:   contrib/man/md/docker-wait.md
	new file:   contrib/man/md/docker.md
	new file:   contrib/man/md/md2man-all.sh
2014-04-21 10:42:46 -07:00
Guillaume J. Charmes 3c50cb44d1 Merge pull request #5232 from kzys/freebsd-graph
Fix graph and pkg/graphdb on FreeBSD
2014-04-21 10:39:50 -07:00
Guillaume J. Charmes 813cebc64f Merge branch 'master' into load-profile
Conflicts:
	daemon/execdriver/native/create.go
	daemon/execdriver/native/driver.go

Docker-DCO-1.1-Signed-off-by: Guillaume J. Charmes <guillaume@charmes.net> (github: creack)
2014-04-21 10:32:13 -07:00
Guillaume J. Charmes ac814ee3c7 Make sure @proc is defined
Docker-DCO-1.1-Signed-off-by: Guillaume J. Charmes <guillaume@charmes.net> (github: creack)
2014-04-21 10:28:04 -07:00
Michael Crosby 004cf556e8 Use cgo to get systems clock ticks for metrics
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-21 10:26:22 -07:00
O.S. Tezer d4ca165827 Merge pull request #5321 from SvenDowideit/osx-install-mkdir-local
Merged.
2014-04-21 19:12:36 +03:00
Michael Crosby f59be989dc Refactor stat parsing to use only 8 fields
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-20 20:45:08 -07:00
Michael Crosby 9cd6a6d614 Merge pull request #24 from ehazlett/cgroups-stats
more work on cpu stats
2014-04-20 21:11:11 -07:00
Evan Hazlett 2f24b5a9dc work on cpu stats
Docker-DCO-1.1-Signed-off-by: Evan Hazlett <ejhazlett@gmail.com> (github: ehazlett)
2014-04-21 00:07:05 -04:00
Michael Crosby bce49dff0d Add freezer stats
This one is a problem because the most useful stat is a string and not a
float like verything else.  We may have to change the return type
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-20 18:35:33 -07:00
Michael Crosby 3bfe13de2c Reuse cpuacct stats for cpu subsystem
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-20 18:20:44 -07:00
Michael Crosby 37248039e1 Fix parsing of blkio files
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-20 18:18:17 -07:00
Michael Crosby 7f12260fd1 Add external function to get cgroup stats
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-20 17:36:20 -07:00
Michael Crosby 9b65f16355 Refactor stats and add them to all subsystems
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-20 12:02:39 -07:00
Michael Crosby 86e34ce59f Squashed commit of the following:
commit 75af1649b063abbc5d662fd2f8bc4ff62c927687
Author: Evan Hazlett <ejhazlett@gmail.com>
Date:   Sun Apr 20 01:32:42 2014 -0400

    more refactor

commit 43b36d0f15d634497127bcb17dacaa70ae92e903
Author: Evan Hazlett <ejhazlett@gmail.com>
Date:   Sun Apr 20 01:11:49 2014 -0400

    refactored cgroup param parsing to util func

commit e3738b0168a075bd92ec828879b0e46bdbbe3845
Author: Evan Hazlett <ejhazlett@gmail.com>
Date:   Sun Apr 20 00:57:19 2014 -0400

    dat error checking

commit 57872bcc59403ecd308cfe97c78f73d6ca58d165
Author: Evan Hazlett <ejhazlett@gmail.com>
Date:   Sun Apr 20 00:43:25 2014 -0400

    proper use of fmt.Errorf

commit 43dad6acc0cb21aac2b04ce074699879898ee820
Author: Evan Hazlett <ejhazlett@gmail.com>
Date:   Sun Apr 20 00:36:45 2014 -0400

    proper placement of defer

commit b7f20b934b2bc92cd39397dbc608b77bff28493c
Author: Evan Hazlett <ejhazlett@gmail.com>
Date:   Sun Apr 20 00:34:39 2014 -0400

    defers, error checking, panic avoidance

commit 7a9a6ff267f8806dfe6676486f73fe89b72968fb
Author: Evan Hazlett <ejhazlett@gmail.com>
Date:   Sun Apr 20 00:22:00 2014 -0400

    data param to use container info instead of host

commit 0e0cf7309be1644687160d6519db792b23cd26e9
Author: Evan Hazlett <ejhazlett@gmail.com>
Date:   Sun Apr 20 00:11:29 2014 -0400

    added stats for cpuacct, memory, and blkio

Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-20 11:34:28 -07:00
Lance Chen b87cb76976 Add missing blank lines in between list items
Lists with paragraphs as items need blank lines in between
items to generate correct layout.

Docker-DCO-1.1-Signed-off-by: Lance Chen <cyen0312@gmail.com> (github: Lance0312)
2014-04-21 01:32:00 +08:00
Sven Dowideit b26821e5c0 on a fresh OSX, /usr/local/bin doesn't exist
Docker-DCO-1.1-Signed-off-by: Sven Dowideit <SvenDowideit@fosiki.com> (github: SvenDowideit)
2014-04-20 22:56:22 +10:00
Jack Danger Canty 611a1d711b typo fix: 'methid' -> 'method' 2014-04-19 23:25:48 -07:00
Tianon Gravi 231f53fd9b Merge pull request #5213 from tianon/missing-ps-requirement
Add missing "ps" requirement to PACKAGERS.md
2014-04-19 21:24:30 -06:00
Tianon Gravi cb2ce9089c Merge pull request #5313 from Lance0312/arch-fd-link
Fix borken /dev/fd in mkimage-arch.sh
2014-04-19 21:23:18 -06:00
Sven Dowideit f10bb364be Merge pull request #5312 from ostezer/docs-illusion-confusion
Urgent fix for crazy docs error on volumes.
2014-04-20 12:02:47 +10:00
Tianon Gravi f2f33d7096 Merge pull request #5249 from tianon/make-validate
Add "validate" Makefile target
2014-04-19 11:35:14 -06:00
O.S.Tezer 97daf9864d Urgent fix for crazy docs error on volumes.
Elaborate on the volumes example to prevent confusion.

Update: Amend the example so it is executable by the reader.
This includes fixing the erring "/var/logs" statement with "/var/log".

Update: Fix sentence structuring to better suit the 80chrs. limit.

Docker-DCO-1.1-Signed-off-by: O.S. Tezer <ostezer@gmail.com> (github: ostezer)
2014-04-19 19:35:00 +03:00
Sven Dowideit 1c75602890 Merge pull request #5309 from ostezer/docs-fix-apostrophe
Introducing spīritus lēnis to fix code highlighting issues due to apostrophe.
2014-04-19 20:39:27 +10:00
Sven Dowideit c7f5799120 Merge pull request #5311 from ostezer/docs-fix-footer-links
Fix footer links. They are pointing to the wrong direzione.
2014-04-19 20:38:44 +10:00
Lance Chen e6b794e542 Fix broken /dev/fd in mkimage-arch.sh
Exactly the same problem as dotcloud/docker#2356

Docker-DCO-1.1-Signed-off-by: Lance Chen <cyen0312@gmail.com> (github: Lance0312)
2014-04-19 16:04:35 +08:00
Michael Crosby 7fdeda8717 Add remove method to subsystems
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-18 22:17:31 -07:00
Michael Crosby e92f2fd395 Break down groups into subsystems
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-18 22:10:30 -07:00
Michael Crosby 06db0604e5 Move raw cgroups into fs package (filesystem)
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-18 21:34:26 -07:00
Michael Crosby ec43ec50b4 Move systemd code into pkg
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-18 21:30:08 -07:00
Michael Crosby 42fb2973c6 Refactor cgroups file locations
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-18 21:14:58 -07:00
O.S.Tezer a96106b5f1 Fix footer links. They are pointing to the wrong direzione.
Docker-DCO-1.1-Signed-off-by: O.S. Tezer <ostezer@gmail.com> (github: ostezer)
2014-04-19 04:13:52 +03:00
Solomon Hykes 4c720d4de7 Merge pull request #4166 from shykes/engine-logging
Engine: optional Logging field to disable custom logging in engine.
2014-04-18 18:05:00 -07:00
O.S.Tezer 2d6324e06a Introducing spīritus lēnis to fix code highlighting issues due to apostrophe.
Docker-DCO-1.1-Signed-off-by: O.S. Tezer <ostezer@gmail.com> (github: ostezer)
2014-04-19 03:35:45 +03:00
Sven Dowideit 87014c0328 Merge pull request #5307 from ostezer/docs-amend-notes-warnings
Mark notes and warnings, fix broken link renderings within.
2014-04-19 08:48:55 +10:00
O.S.Tezer 7935850005 Mark notes and warnings, fix broken link renderings within.
Docker-DCO-1.1-Signed-off-by: O.S. Tezer <ostezer@gmail.com> (github: ostezer)
2014-04-18 23:31:38 +03:00
Victor Vieux 5b6b91aa2c Merge pull request #5264 from unclejack/change_inode_map
change inode map to struct from bool
2014-04-18 11:48:23 -07:00
unclejack 2931979a5d Merge pull request #5304 from vieux/convert_rm_tests
convert so rm tests to integration-cli
2014-04-18 21:11:18 +03:00
unclejack c25704e31b Merge pull request #5296 from crosbymichael/move-integration-tests
Move integration tests
2014-04-18 21:01:33 +03:00
Victor Vieux fcbc717f9a convert so rm tests to integration-cli
Docker-DCO-1.1-Signed-off-by: Victor Vieux <victor.vieux@docker.com> (github: vieux)
2014-04-18 17:40:12 +00:00
unclejack c2df189ea5 Merge pull request #5236 from crosbymichael/remove-ghost-networking
Remove ghost networking
2014-04-18 20:38:12 +03:00
shin- 720f344704 Added support for multiple endpoints in X-Docker-Endpoints header
Docker-DCO-1.1-Signed-off-by: Joffrey F <joffrey@docker.com> (github: shin-)
2014-04-18 17:42:54 +02:00
O.S. Tezer 3eea3e0714 Merge pull request #5298 from SvenDowideit/remove-auto-markdown-conversion
Merged.
2014-04-18 14:13:36 +03:00
Sven Dowideit d4a00c7494 the markdown docs are now master, but I may do a manual conversion a few more times when older PR's are merged
Docker-DCO-1.1-Signed-off-by: Sven Dowideit <SvenDowideit@fosiki.com> (github: SvenDowideit)
2014-04-18 16:34:53 +10:00
Michael Crosby 58e011595e Remove worthless iptables test
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-18 03:22:53 +00:00
Michael Crosby 296fcf331f Port privileged tests
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-18 03:20:17 +00:00
Michael Crosby caad45d0ed Port networking tests
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-18 03:12:27 +00:00
Michael Crosby 47510bd6eb Port environment test
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-18 02:53:08 +00:00
Michael Crosby e2ed4b9077 Port user tests and concurrent tests
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-18 02:47:39 +00:00
James Turnbull 6df19aa78e Merge pull request #5275 from ostezer/docs-add-back-ga-code
Add back the GA code block.
2014-04-17 22:44:48 -04:00
Sven Dowideit a0cfcbf648 Merge pull request #5274 from ostezer/docs-add-edit-on-github-link
Amendments providing the "Edit on GitHub" link for docs on master.
2014-04-18 12:43:24 +10:00
Sven Dowideit 81d9d92436 Merge pull request #5265 from ostezer/docs-fix-mobile-menu-click
Fix & improvements for mobile (& desktop) menu & submenu behaviour & issues.
2014-04-18 12:42:35 +10:00
James Turnbull ac697e5f52 Merge pull request #5257 from ostezer/docs-fix-toc-click
Fix for TOC "click/expand" & "scroll position" problem on mobile.
2014-04-17 22:42:15 -04:00
Michael Crosby 03993eb534 Port volumes and exit code tests
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-18 02:34:10 +00:00
Michael Crosby 6beb858fb0 Update commit test in cli
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-18 02:24:19 +00:00
Michael Crosby 72f49e554f Port multiple attach test to cli tests
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-18 02:14:00 +00:00
Michael Crosby 76a19bb3a9 Add test verify container ID
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-18 01:58:20 +00:00
Sven Dowideit b84de10b85 Merge pull request #5292 from ostezer/docs-fix-mkdocs-yaaaayml-file
Make things awesomer by amending mkdocs.yml
2014-04-18 09:57:38 +10:00
O.S.Tezer f3bf61fad4 Make things awesomer by amending mkdocs.yml
Docker-DCO-1.1-Signed-off-by: O.S. Tezer <ostezer@gmail.com> (github: ostezer)
2014-04-18 02:51:04 +03:00
Michael Crosby eceeebc22d Remove IsGhost checks around networking
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-17 23:49:59 +00:00
Sven Dowideit 6934f0fa9e Merge pull request #5269 from ostezer/docs-improve-index-docs
Improve (&restructure) Docker Index docs on the Docker docs.
2014-04-18 09:25:54 +10:00
Sven Dowideit fb2110b465 Merge pull request #5287 from jamtur01/tickets/5283
Fixed #5283 - literal leftover from cutover
2014-04-18 09:04:16 +10:00
Sven Dowideit bb02624145 Merge pull request #5284 from jamtur01/tickets/5282
Fixed #5282 - deprecated -name syntax
2014-04-18 09:03:55 +10:00
James Turnbull 2f3cb370df Fixed #5283 - literal leftover from cutover
Docker-DCO-1.1-Signed-off-by: James Turnbull <james@lovedthanlost.net> (github: jamtur01)
2014-04-17 18:58:02 -04:00
O.S. Tezer ad8db1aa22 Merge pull request #5261 from ostezer/fix-inline-links
Fix for broken in-document links which got scrambled during conversion.
2014-04-18 01:49:18 +03:00
Sven Dowideit f34383ac7e Merge pull request #5260 from ostezer/docs-remove-manual-tocs
Remove manually written TOCs from archived docs.
2014-04-18 08:43:27 +10:00
James Turnbull a75758fcf6 Fixed #5282 - deprecated -name syntax
Docker-DCO-1.1-Signed-off-by: James Turnbull <james@lovedthanlost.net> (github: jamtur01)
2014-04-17 18:43:06 -04:00
O.S.Tezer baa4f39551 Add back the GA code block.
Docker-DCO-1.1-Signed-off-by: O.S. Tezer <ostezer@gmail.com> (github: ostezer)
2014-04-18 01:42:23 +03:00
Victor Vieux 58595475ea Merge pull request #5273 from alexlarsson/rename-runtime-to-daemon
Rename runtime/* to daemon/*
2014-04-17 14:56:43 -07:00
O.S.Tezer 05d7271f91 Amendments providing the "Edit on GitHub" link for docs on master.
Docker-DCO-1.1-Signed-off-by: O.S. Tezer <ostezer@gmail.com> (github: ostezer)
2014-04-18 00:53:39 +03:00
Alexander Larsson 359b7df5d2 Rename runtime/* to daemon/*
Docker-DCO-1.1-Signed-off-by: Alexander Larsson <alexl@redhat.com> (github: alexlarsson)
2014-04-17 14:43:01 -07:00
O.S.Tezer cb6bcfd6bc Improve (&restructure) Docker Index docs on the Docker docs.
Docker-DCO-1.1-Signed-off-by: O.S. Tezer <ostezer@gmail.com> (github: ostezer)
2014-04-17 23:13:59 +03:00
O.S.Tezer 7f62f470f3 Fix & improvements for mobile (& desktop) menu & submenu behaviour & issues.
Docker-DCO-1.1-Signed-off-by: O.S. Tezer <ostezer@gmail.com> (github: ostezer)
2014-04-17 20:35:08 +03:00
unclejack d072f316e3 change inode map to struct from bool
Docker-DCO-1.1-Signed-off-by: Cristian Staretu <cristian.staretu@gmail.com> (github: unclejack)
2014-04-17 20:08:14 +03:00
O.S.Tezer 1ff66d27b5 Fix for broken in-document links which got scrambled during conversion.
Docker-DCO-1.1-Signed-off-by: O.S. Tezer <ostezer@gmail.com> (github: ostezer)
2014-04-17 18:09:08 +03:00
O.S.Tezer 24a42b1370 Remove manually written TOCs from archived docs.
Docker-DCO-1.1-Signed-off-by: O.S. Tezer <ostezer@gmail.com> (github: ostezer)
2014-04-17 17:47:34 +03:00
O.S.Tezer 205e85da32 Fix for TOC "click/expand" & "scroll position" problem on mobile.
Fixes:

 - Click/expand
 - Scroll pos.
 - TOC table scroll-down arrow.
 - TOC title scrolls to top.

Docker-DCO-1.1-Signed-off-by: O.S. Tezer <ostezer@gmail.com> (github: ostezer)
2014-04-17 15:48:03 +03:00
Sven Dowideit 57cbe8b106 Merge pull request #5230 from huslage/master
Replacing ASCII art image with real diagram
2014-04-17 12:47:48 +10:00
Michael Crosby 8e67197267 Merge pull request #5248 from unclejack/more_info_testtop
provide more information when TestTop tests fail
2014-04-16 18:54:04 -07:00
Sven Dowideit 65fb2e77eb simplify the docs branch process for now
Docker-DCO-1.1-Signed-off-by: Sven Dowideit <SvenDowideit@fosiki.com> (github: SvenDowideit)
2014-04-17 11:11:32 +10:00
Tianon Gravi 7de1557b2e Add "validate" Makefile target
This was supposed to be part of my previous PR, but somehow got missed.

Docker-DCO-1.1-Signed-off-by: Andrew Page <admwiggin@gmail.com> (github: tianon)
2014-04-16 18:56:02 -06:00
unclejack 3ac90aeed5 provide more information when TestTop tests fail
Docker-DCO-1.1-Signed-off-by: Cristian Staretu <cristian.staretu@gmail.com> (github: unclejack)
2014-04-17 03:39:15 +03:00
Victor Vieux 925dfdb18a Merge pull request #5246 from crosbymichael/fix-mount
Fix unmount when host volume is removed
2014-04-16 17:28:37 -07:00
Victor Vieux ef114930cd Merge pull request #5215 from danmcp/fix_typos
Fixing typos
2014-04-16 16:44:16 -07:00
unclejack 2d6f537bb3 Merge pull request #5234 from crosbymichael/refactor-container-start
Refactor container start
2014-04-17 02:20:35 +03:00
unclejack 66480d67fb Merge pull request #5243 from creack/hairpin_nat_test
Add integration test for hairpin nat
2014-04-17 01:44:56 +03:00
O.S. Tezer b92c86764a Merge pull request #5245 from SvenDowideit/more-working-with
this topic nolonger crashes the build
2014-04-17 01:44:50 +03:00
Sven Dowideit 4ba7b28006 this topic nolonger crashes the build
Docker-DCO-1.1-Signed-off-by: Sven Dowideit <SvenDowideit@fosiki.com> (github: SvenDowideit)
2014-04-17 08:43:07 +10:00
Sven Dowideit f85d03327d Merge pull request #5233 from ostezer/docs-fix-scroll-header-margin
Fix headers staying under the menu when clicked-to-scroll.
2014-04-17 08:40:55 +10:00
Sven Dowideit 2f3cccfcbd Merge pull request #5231 from ostezer/fix-breadcrumbs
Amend breadcrumbs to link to the section indexes, i.e., home/:section/
2014-04-17 08:40:40 +10:00
Kato Kazuyoshi 92ea101bc4 SQLite is also available in FreeBSD
Docker-DCO-1.1-Signed-off-by: Kato Kazuyoshi <kato.kazuyoshi@gmail.com> (github: kzys)
2014-04-17 07:19:30 +09:00
Guillaume J. Charmes 1775ed8c75 Add integration test for hairpin nat
Docker-DCO-1.1-Signed-off-by: Guillaume J. Charmes <guillaume@charmes.net> (github: creack)
2014-04-16 14:50:11 -07:00
O.S.Tezer 882862b095 Fix headers staying under the menu when clicked-to-scroll.
Docker-DCO-1.1-Signed-off-by: O.S. Tezer <ostezer@gmail.com> (github: ostezer)
2014-04-16 19:38:08 +03:00
Kato Kazuyoshi e1e512e2da This permission should be interpreted as octal, not decimal
Docker-DCO-1.1-Signed-off-by: Kato Kazuyoshi <kato.kazuyoshi@gmail.com> (github: kzys)
2014-04-17 00:48:27 +09:00
Aaron Huslage 75d97a4d2f Replacing ASCII art image with real diagram
Docker-DCO-1.1-Signed-off-by: Aaron Huslage <huslage@gmail.com> (github: huslage)
2014-04-16 11:24:07 -04:00
O.S.Tezer b74fa75872 Amend breadcrumbs to link to the section indexes, i.e., home/section/
Docker-DCO-1.1-Signed-off-by: O.S. Tezer <ostezer@gmail.com> (github: ostezer)
2014-04-16 18:20:29 +03:00
O.S. Tezer 24c4c3e0e9 Merge pull request #5227 from SvenDowideit/fix-conversion-urls-securityblog
rst->md conversion fix
2014-04-16 13:11:29 +03:00
Sven Dowideit ce7d251d52 rst->md conversion fix
Docker-DCO-1.1-Signed-off-by: Sven Dowideit <SvenDowideit@fosiki.com> (github: SvenDowideit)
2014-04-16 14:43:52 +10:00
Solomon Hykes 9b6c40cf69 Merge pull request #5204 from ostezer/new-maintainer
Adding myself to the MAINTAINERS
2014-04-15 21:19:39 -07:00
Tianon Gravi 2e78ab91ec Add missing "ps" requirement to PACKAGERS.md
Docker-DCO-1.1-Signed-off-by: Andrew Page <admwiggin@gmail.com> (github: tianon)
2014-04-15 21:55:48 -06:00
Sven Dowideit 8e35bb256d Merge pull request #5224 from dhrp/tp-titles-colors
Changed heading colors and some alignments (no longer center and justification in left column)
2014-04-16 13:07:52 +10:00
Thatcher Peskens 4d3e448a33 Changed heading colors and some alignments (no longer center and justification in left column)
Docker-DCO-1.1-Signed-off-by: Thatcher Peskens <thatcher@docker.com> (github: dhrp)
2014-04-15 19:15:13 -07:00
Sven Dowideit b9f66049fa Merge pull request #5219 from dotcloud/master-doc-markdown
now, with shiney markdown
2014-04-16 11:05:29 +10:00
Sven Dowideit ac999a9cb2 now, with shiney markdown
Docker-DCO-1.1-Signed-off-by: Sven Dowideit <SvenDowideit@fosiki.com> (github: SvenDowideit)
2014-04-16 11:04:14 +10:00
Sven Dowideit a777ebcee6 move the documentation to markdown
Docker-DCO-1.1-Signed-off-by: Sven Dowideit <SvenDowideit@home.org.au> (github: SvenDowideit)
2014-04-16 11:04:01 +10:00
Sven Dowideit ede9ea37c3 Merge pull request #5206 from SvenDowideit/stage-markdown
move the documentation to markdown
2014-04-16 10:08:57 +10:00
Sven Dowideit 936a03bfdd move the documentation to markdown
Docker-DCO-1.1-Signed-off-by: Sven Dowideit <SvenDowideit@home.org.au> (github: SvenDowideit)

Docker-DCO-1.1-Signed-off-by: Sven Dowideit <SvenDowideit@home.org.au> (github: )
2014-04-16 00:02:10 +00:00
Dan McPherson dceea17805 Fixing typos
Docker-DCO-1.1-Signed-off-by: Dan McPherson <dmcphers@redhat.com> (github: danmcp)
2014-04-15 18:06:48 -04:00
O.S.Tezer 32d8b5da50 Adding myself to the MAINTAINERS file.
Docker-DCO-1.1-Signed-off-by: O.S. Tezer <ostezer@gmail.com> (github: ostezer)
2014-04-16 00:33:14 +03:00
unclejack 80f6b01132 Merge pull request #5211 from crosbymichael/update-cgroup-defaults
Ignore not exist errors for joining default subsystems
2014-04-15 22:55:26 +03:00
Tianon Gravi 994b7eaeb7 Merge pull request #5201 from tianon/build-busybox
Fetch the "busybox" image source so we can build locally instead of pulling during the integration tests
2014-04-15 09:47:05 -06:00
Tianon Gravi de167a7514 Merge pull request #5181 from uggedal/mkimage-alpine
contrib: mkimage script for alpine linux
2014-04-15 08:09:42 -06:00
unclejack 8b54e57fa8 Merge pull request #5202 from vieux/allow_dot_repo
Allow dot in repo name
2014-04-15 13:58:33 +03:00
Eivind Uggedal 6a2bdc6eb7 contrib: mkimage script for alpine linux
Docker-DCO-1.1-Signed-off-by: Eivind Uggedal <eivind@uggedal.com> (github: uggedal)
2014-04-15 07:59:42 +00:00
Victor Vieux d61fce9af7 allow dot in repo name
Docker-DCO-1.1-Signed-off-by: Victor Vieux <victor.vieux@docker.com> (github: vieux)
2014-04-14 23:15:38 +00:00
Tianon Gravi 7bb72fa080 Fetch the "busybox" image source so we can build locally instead of pulling during the integration tests
Docker-DCO-1.1-Signed-off-by: Andrew Page <admwiggin@gmail.com> (github: tianon)
2014-04-14 13:35:54 -06:00
Guillaume J. Charmes e5ad715e59 Merge pull request #5158 from vieux/refactor_build_only_configFile
refactor build job to know only configFile
2014-04-14 10:59:48 -07:00
Guillaume J. Charmes 19ffc5e92f Merge pull request #5075 from tianon/update-check-config
Update check-config.sh with more kernel configs and more reliable cgroup hierarchy/subsystem check
2014-04-14 10:58:00 -07:00
Victor Vieux 5fc1b4d2cd Merge pull request #5132 from crosbymichael/fix-cgroup-hiar
Setup cgroups for supported subsystems
2014-04-14 10:56:15 -07:00
Guillaume J. Charmes f98ed28c1d Merge pull request #4878 from kzys/freebsd-utimes
Support FreeBSD on pkg/system/utimes_*.go
2014-04-14 10:39:25 -07:00
Michael Crosby 413190e159 Merge pull request #5172 from pnasrat/5166-large-image-graph-restore
Enable construction of TruncIndex from id array.
2014-04-14 10:31:16 -07:00
Victor Vieux e9c3e39743 rename configFile to auth in the job
Docker-DCO-1.1-Signed-off-by: Victor Vieux <victor.vieux@docker.com> (github: vieux)
2014-04-14 17:15:22 +00:00
unclejack 0037dee02c Merge pull request #5160 from kzys/fs-symlink
Fix utils.FollowSymlinkInScope's infinite loops bug
2014-04-14 20:12:39 +03:00
O.S. Tezer b255d96694 Merge pull request #4828 from almoehi/patch-1
Added reactive-docker to list of remote API clients
2014-04-14 19:06:59 +03:00
Michael Crosby 39103e72a3 Fix unmount when host volume is removed
Fixes #5244
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-14 12:43:01 +00:00
Michael Crosby 9bd7d09871 Remove ArgsAsString because its a util function
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-14 07:08:54 +00:00
Michael Crosby 35a88f2c29 Fix resolvconf logic
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-14 06:58:04 +00:00
Michael Crosby 71b241cbfe Remove container.When method
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-14 06:54:40 +00:00
Michael Crosby c99ba05c84 Refactor container start to make it more manageable
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-14 06:46:34 +00:00
Michael Crosby f00ca72baa Move network settings into separate file
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-14 06:15:31 +00:00
Michael Crosby 3061a6a2ab Generate imports based on what is avaliable
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-14 05:22:45 +00:00
Paul Nasrat 84a76f2796 Add benchmark tests for TruncIndex.
Compare add vs new.

Some historical data in PR #5172.

Docker-DCO-1.1-Signed-off-by: Paul Nasrat <pnasrat@gmail.com> (github: pnasrat)
2014-04-13 22:36:15 -04:00
Michael Crosby 184728e7bc Ignore not exist errors for joining default subsystems
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-14 00:07:48 +00:00
Michael Crosby 6c26a87901 Ignore is not exist error
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-14 00:03:35 +00:00
Michael Crosby 052cc5a637 Move apparmor to top level pkg
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-13 23:33:25 +00:00
Michael Crosby 5f4bc4f916 Use apparmor_parser directly
The current load script does alot of things.  If it does not find the
parser loaded on the system it will just exit 0 and not load the
profile.  We think it should fail loudly if it cannot load the profile
and apparmor is enabled on the system.
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-13 23:31:10 +00:00
Tianon Gravi 2d20c92d29 Merge pull request #5176 from unclejack/check_before_pulling
cli integ: don't fetch busybox if it exists
2014-04-13 09:28:30 -06:00
unclejack 449f92f11e cli integ: don't fetch busybox if it exists
Don't make calls to the registry if the image exists already.

Docker-DCO-1.1-Signed-off-by: Cristian Staretu <cristian.staretu@gmail.com> (github: unclejack)
2014-04-13 15:06:15 +03:00
O.S. Tezer 370b935b49 Merge pull request #5177 from jbbarth/docs-add-common-errors-for-test-suite
Docs: add some example log lines that indicate a lack of memory when running the test suite
2014-04-12 21:03:24 +03:00
O.S. Tezer 1f7e97e951 Merge pull request #5178 from jbbarth/docs-improve-ubuntulinux-accounting-section
Docs: improve installation/ubuntulinux memory and swap accounting section
2014-04-12 20:32:26 +03:00
Jean-Baptiste Barth 0a0e49d406 Docs: improve installation/ubuntulinux memory and swap accounting section
Docker-DCO-1.1-Signed-off-by: Jean-Baptiste Barth <jeanbaptiste.barth@gmail.com> (github: jbbarth)
2014-04-12 10:57:19 +00:00
Jean-Baptiste Barth 26845ef1ae Docs: add some example log lines that indicate a lack of memory when running the test suite
Docker-DCO-1.1-Signed-off-by: Jean-Baptiste Barth <jeanbaptiste.barth@gmail.com> (github: jbbarth)
2014-04-12 02:09:06 +00:00
Kato Kazuyoshi 0f72486346 Fix utils.FollowSymlinkInScope's infinite loop bug
fs_test.go doesn't finish if Docker's code is placed under a directory
which has symlinks between / and the directory.
For example, the below doesn't finish before the change.

  /home -> usr/home
  FollowSymlinkInScope("/home/bob/foo/bar", "/home/bob/foo")

Docker-DCO-1.1-Signed-off-by: Kato Kazuyoshi <kato.kazuyoshi@gmail.com> (github: kzys)
2014-04-12 07:37:18 +09:00
Kato Kazuyoshi e3e078ca2f Add the test to reproduce the issue even in "make test"
Docker-DCO-1.1-Signed-off-by: Kato Kazuyoshi <kato.kazuyoshi@gmail.com> (github: kzys)
2014-04-12 07:37:17 +09:00
Paul Nasrat 4f169c2db5 Enable construction of TruncIndex from id array.
Fixes #5166

Current graph.restore is essentially O(n^2 log n) due to how
suffixarray creation works.

Rather than create/append/create new this supports creation from a seed
array of ids.

Functional testing shows this eliminates the hang on Creating image
graph reported on list.

Docker-DCO-1.1-Signed-off-by: Paul Nasrat <pnasrat@gmail.com> (github: pnasrat)
2014-04-11 16:39:58 -04:00
Alexander Larsson 4ddfffcab3 Join memory and cpu cgroup in systemd too
Docker-DCO-1.1-Signed-off-by: Alexander Larsson <alexl@redhat.com> (github: alexlarsson)
Docker-DCO-1.1-Signed-off-by: Alexander Larsson <alexl@redhat.com> (github: crosbymichael)
2014-04-11 17:29:40 +00:00
Michael Crosby 505184d2dc Join cpuacct, freezer, perf_event, and blkio groups
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-11 17:28:27 +00:00
Michael Crosby 031fcb31d3 Setup cgroups for all subsystems
Fixes #5117
Fixes #5118
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-11 17:28:27 +00:00
James Turnbull 931f065560 Merge pull request #5164 from jsimonelis/patch-2
terms update: FQIN must include a tag
2014-04-11 06:47:28 -07:00
Justin Simonelis 69fbf8e31f terms update: FQIN must include a tag
change: A fully qualified image name must include a tag.

Recommitting changes for PR: https://github.com/dotcloud/docker/pull/5145
since SvenDowideit suggested I would need to sign my commit for it to be accepted.

Docker-DCO-1.1-Signed-off-by: Justin Simonelis <justin.p.simonelis@gmail.com> (github: jsimonelis)
2014-04-11 08:51:50 -04:00
Victor Vieux b9731bccf2 refactor build job to know only configFile
Docker-DCO-1.1-Signed-off-by: Victor Vieux <victor.vieux@docker.com> (github: vieux)
2014-04-10 22:29:03 +00:00
Tianon Gravi 28e7e81479 Merge pull request #5072 from tianon/hack-set-e-consistently
Update bundlescripts to use "set -e" consistently
2014-04-10 13:37:36 -06:00
Tianon Gravi feae37c171 Merge pull request #5071 from tianon/minor-man-formatting-consistency
Fix a few minor man formatting consistency issues
2014-04-10 13:13:37 -06:00
Victor Vieux f66082a443 Merge pull request #5093 from danielnorberg/do-not-create-bridge
net: do not create -b/--bridge specified bridge
2014-04-10 11:17:02 -07:00
Victor Vieux bcc3857fa0 Merge pull request #4990 from vbatts/vbatts-server_show_info
docker daemon: show info about the server
2014-04-10 11:14:09 -07:00
Victor Vieux b8c10d8af2 Merge pull request #5143 from kzys/ns-nil
Avoid "invalid memory address or nil pointer dereference" panic
2014-04-10 11:07:35 -07:00
O.S. Tezer a521388863 Merge pull request #4821 from jimenez/3903-add_event_end_timestamp-feature
Adding timestamp end to events endpoint. Modifying api docs.
2014-04-10 20:54:53 +03:00
Victor Vieux 897bf5439d Merge pull request #5140 from unclejack/build_immediate_cleanup
delete containers during build after every step
2014-04-10 10:49:13 -07:00
Isabel Jimenez 66dd4ea4e2 Adding timestamp end to events endpoint. Modifying api docs.
Docker-DCO-1.1-Signed-off-by: Isabel Jimenez <contact@isabeljimenez.com> (github: jimenez)
2014-04-10 10:43:21 -07:00
Daniel Norberg d4746d3ea0 bridge driver: clean up error returns
Docker-DCO-1.1-Signed-off-by: Daniel Norberg <daniel.norberg@gmail.com> (github: danielnorberg)
2014-04-10 11:26:48 -04:00
Daniel Norberg 336199a877 net: do not create -b/--bridge specified bridge
If the bridge specified using -b/--bridge doesn't
exist, fail instead of attempting to create it.

This is consistent with the docker documentation
on -b/--bridge: "Attach containers to a pre
existing network bridge". 

It is also less surprising in an environment where
the operator expected the bridge to be properly
set up before docker starts and expects docker to
fail fast if the bridge was not up instead of
masking this error and coming up in some
potentially broken state.

With this patch, docker still creates docker0 if
needed and no bridge was explicitly specified.

Docker-DCO-1.1-Signed-off-by: Daniel Norberg <daniel.norberg@gmail.com> (github: danielnorberg)
2014-04-10 11:11:17 -04:00
Guillaume J. Charmes 7dd9c208fd Merge pull request #5069 from tianon/hack-make-ubuntu-man
Add contrib/man to our generated deb
2014-04-10 08:04:04 -07:00
Guillaume J. Charmes 4a88e111d0 Merge pull request #5087 from vbatts/vbatts-save_permissions
docker save: fix filemode permissions
2014-04-10 08:00:37 -07:00
Guillaume J. Charmes 042a50a8fe Merge pull request #5131 from crosbymichael/shm-mode
Change shm mode to 1777
2014-04-10 07:50:32 -07:00
Guillaume J. Charmes 5b242c95da Merge pull request #5115 from alexlarsson/fix-libcontainer-network-rhel6
Fix libcontainer network support on rhel6
2014-04-10 07:45:12 -07:00
Guillaume J. Charmes ec9190cdd2 Merge pull request #5133 from crosbymichael/revert-hairpin
Revert "Support hairpin NAT without going through docker server"
2014-04-10 07:06:35 -07:00
James Turnbull 49e87d1932 Merge pull request #5050 from SvenDowideit/add-some-words-to-cli
add some more text to the cli docs
2014-04-10 07:05:19 -07:00
James Turnbull 0bc479c48b Merge pull request #5109 from jonathanpa/master
Update mac.rst to add homebrew instructions.
2014-04-10 06:42:54 -07:00
Kato Kazuyoshi c5226d94fa Avoid "invalid memory address or nil pointer dereference" panic
libcontainer.GetNamespace returns nil on FreeBSD because
libcontainer.namespaceList is empty. In this case, Namespaces#Get should
return nil instead of being panic.

Docker-DCO-1.1-Signed-off-by: Kato Kazuyoshi <kato.kazuyoshi@gmail.com> (github: kzys)
2014-04-10 22:07:29 +09:00
Sven Dowideit e625cee28d add some more text to the cli docs
Docker-DCO-1.1-Signed-off-by: Sven Dowideit <SvenDowideit@fosiki.com> (github: SvenDowideit)
2014-04-10 12:52:46 +00:00
unclejack 7931be5cba delete containers during build after every step
This commit changes the way docker build cleans up containers.
Containers get cleaned up right away after they've been committed and
they've become an image.

When the build fails, only the last container of the failing step is
left behind.

Docker-DCO-1.1-Signed-off-by: Cristian Staretu <cristian.staretu@gmail.com> (github: unclejack)
2014-04-10 14:46:42 +03:00
Jonathan Pares 057d347eaf Update mac.rst to add homebrew instructions.
Explain how to install boot2docker and docker by using homebrew.

Docker-DCO-1.1-Signed-off-by: Jonathan Pares <jonathanpa@users.noreply.github.com> (github: jonathanpa)
2014-04-10 09:48:36 +02:00
Michael Crosby 14e1a2345d Merge pull request #5134 from tianon/fix-mtab-symlink-error
Fix spurious mtab symlink error when /etc doesn't exist yet
2014-04-09 17:54:29 -07:00
Victor Vieux 8d25eef5ef Merge pull request #5127 from crosbymichael/update-apparmor
Check for apparmor enabled on host to populate profile
2014-04-09 17:04:13 -07:00
Kato Kazuyoshi 1c90a4dd9a Support FreeBSD on pkg/system/utimes_*.go
Implement system.LUtimesNano and system.UtimesNano. The latter might be
removed in future because it's basically same as os.Chtimes. That's why
the test is mainly focusing LUtimesNano.

Docker-DCO-1.1-Signed-off-by: Kato Kazuyoshi <kato.kazuyoshi@gmail.com> (github: kzys)
2014-04-10 07:34:37 +09:00
Kato Kazuyoshi 66baf56601 Unlike GNU find, FreeBSD's find needs a path before an expression
Docker-DCO-1.1-Signed-off-by: Kato Kazuyoshi <kato.kazuyoshi@gmail.com> (github: kzys)
2014-04-10 07:13:41 +09:00
Kato Kazuyoshi 18bea2495d Use LLVM Clang explicitly on FreeBSD
Docker-DCO-1.1-Signed-off-by: Kato Kazuyoshi <kato.kazuyoshi@gmail.com> (github: kzys)
2014-04-10 07:13:41 +09:00
Tianon Gravi b298960aed Update bundlescripts to use "set -e" consistently
"set -e" is already inherited here from make.sh, but explicit is always better than implicit (hence the "set -e" in the first place!)

Docker-DCO-1.1-Signed-off-by: Andrew Page <admwiggin@gmail.com> (github: tianon)
2014-04-09 12:11:06 -06:00
Victor Vieux 7c37cae17d Merge pull request #5102 from shykes/api-cleanup-tests
Make remote API unit tests easier to read and write
2014-04-09 10:27:03 -07:00
Tianon Gravi 3d9cd1e5f1 Fix spurious mtab symlink error when /etc doesn't exist yet
symlink /proc/mounts /var/lib/docker/btrfs/subvolumes/1763d6602b8b871f0a79754f1cb0a31b3928bb95de5232b1b8c15c60fa1017f6-init/etc/mtab: no such file or directory

Docker-DCO-1.1-Signed-off-by: Andrew Page <admwiggin@gmail.com> (github: tianon)
2014-04-09 11:13:54 -06:00
James Turnbull 407b11c26b Merge pull request #5104 from crosbymichael/update-dns-vf-docs
Update dns and volumes-from docs
2014-04-09 06:55:52 -07:00
Alexander Larsson 59c1b2880b Fix libcontainer network support on rhel6
It seems that netlink in older kernels, including RHEL6, does not
support RTM_SETLINK with IFLA_MASTER. It just silently ignores it, reporting
no error, causing netlink.NetworkSetMaster() to not do anything yet
return no error.

We fix this by introducing and using AddToBridge() in a very similar manner
to CreateBridge(), which use the old ioctls directly.

This fixes https://github.com/dotcloud/docker/issues/4668

Docker-DCO-1.1-Signed-off-by: Alexander Larsson <alexl@redhat.com> (github: alexlarsson)
2014-04-09 15:44:18 +02:00
Michael Crosby 63c303eecd Revert "Support hairpin NAT without going through docker server"
This reverts commit b39d02b611.

Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-09 11:55:08 +00:00
Michael Crosby 986cf931c3 Change shm mode to 1777
Fixes #5126
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-09 10:53:32 +00:00
Michael Crosby 87f0d63fb2 Check for apparmor enabled on host to populate profile
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-09 10:22:17 +00:00
Michael Crosby a43a600a2c Update dns and volumes-from docs
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
2014-04-08 19:17:30 -07:00
Tianon Gravi 566d49c9ca Merge pull request #5022 from tianon/make-validate
Add "make validate" for both local and CI gofmt and DCO verification
2014-04-08 19:17:30 -06:00
Solomon Hykes 1e6f21dc9e Make remote API unit tests easier to read and write
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-08 18:14:47 -07:00
Guillaume J. Charmes b602d6ca40 Merge pull request #5101 from unclejack/merge_release_v0.10.0
Merge release v0.10.0
2014-04-08 16:09:47 -07:00
unclejack e8aa24c71a Change version to v0.10.0
Docker-DCO-1.1-Signed-off-by: Cristian Staretu <cristian.staretu@gmail.com> (github: unclejack)
2014-04-09 02:02:19 +03:00
unclejack e128a606e3 Merge pull request #5079 from unclejack/bump_v0.10.0
Bump version to v0.10.0
2014-04-09 01:56:01 +03:00
Vincent Batts 0a6d42e208 docker save: fix filemode permissions
currently the files created are not readable. This makes the files and
directories permissions more sane.

Docker-DCO-1.1-Signed-off-by: Vincent Batts <vbatts@redhat.com> (github: vbatts)
2014-04-08 12:39:25 -04:00
almoehi a67f350442 Added reactive-docker to list of remote API clients
Docker-DCO-1.1-Signed-off-by: H. Rapp <webmaster@3kolor.com> (github: almoehi)
2014-04-08 11:47:15 +02:00
Tianon Gravi 5737c2eb98 Update check-config.sh with more kernel configs and more reliable cgroup hierarchy/subsystem check
Docker-DCO-1.1-Signed-off-by: Andrew Page <admwiggin@gmail.com> (github: tianon)
2014-04-07 22:53:42 -06:00
Tianon Gravi 7908725e3f Fix a few minor man formatting consistency issues
Some flags ended with a colon, some didn't.  For man pages, the prevailing normal practice is not to end the flags lines with colons.

Docker-DCO-1.1-Signed-off-by: Andrew Page <admwiggin@gmail.com> (github: tianon)
2014-04-07 21:38:30 -06:00
Tianon Gravi ab248675aa Add contrib/man to our generated deb
Docker-DCO-1.1-Signed-off-by: Andrew Page <admwiggin@gmail.com> (github: tianon)
2014-04-07 21:32:17 -06:00
Solomon Hykes ea2fba5ce0 Engine: optional Logging field to disable custom logging in engine.
* The default behavior is preserved
* This disables the use of the `TEST` environment variable in engine.

Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
2014-04-07 21:41:25 +00:00
Tianon Gravi 919fe7a3a1 Remove the old Travis-specific files that are no longer necessary
Docker-DCO-1.1-Signed-off-by: Andrew Page <admwiggin@gmail.com> (github: tianon)
2014-04-04 00:46:47 -06:00
Tianon Gravi 81370b5b0f Add new validate-dco and validate-gofmt bundlescripts for DCO and gofmt validation
Docker-DCO-1.1-Signed-off-by: Andrew Page <admwiggin@gmail.com> (github: tianon)
2014-04-04 00:41:33 -06:00
Vincent Batts cea43f8a2d docker daemon: show info about the server
For combing through logs, have an intro line with information about the
running instance of the docker daemon.

Docker-DCO-1.1-Signed-off-by: Vincent Batts <vbatts@redhat.com> (github: vbatts)
2014-04-03 10:54:54 -04:00
Vincent Batts 2b855afaee registry: Info collection
roll version and standalone information into the _ping. And to support
Headers they are checked after the JSON is loaded (if there is anything
to load). To stay backwards compatible, if the _ping contents are not
able to unmarshal to RegistryInfo, do not stop, but continue with the
same behavior.

Docker-DCO-1.1-Signed-off-by: Vincent Batts <vbatts@redhat.com> (github: vbatts)
2014-03-11 23:36:51 -04:00
Vincent Batts 2a2c694758 registry: make certain headers optional
For a pull-only, static registry, there only a couple of headers that
need to be optional (that are presently required.
* X-Docker-Registry-Version
* X-Docker-Size
* X-Docker-Endpoints

Docker-DCO-1.1-Signed-off-by: Vincent Batts <vbatts@redhat.com> (github: vbatts)
2014-03-11 10:08:44 -04:00
604 changed files with 49207 additions and 38065 deletions
+3
View File
@@ -23,3 +23,6 @@ bundles/
vendor/pkg/
pyenv
Vagrantfile
docs/AWS_S3_BUCKET
docs/GIT_BRANCH
docs/VERSION
+2 -14
View File
@@ -10,21 +10,9 @@ install: true
before_script:
- env | sort
- sudo apt-get update -qq
- sudo apt-get install -qq python-yaml
- git remote add upstream git://github.com/dotcloud/docker.git
- upstream=master;
if [ "$TRAVIS_PULL_REQUEST" != false ]; then
upstream=$TRAVIS_BRANCH;
fi;
git fetch --append --no-tags upstream refs/heads/$upstream:refs/remotes/upstream/$upstream
# sometimes we have upstream master already as origin/master (PRs), but other times we don't, so let's just make sure we have a completely unambiguous way to specify "upstream master" from here out
# but if it's a PR against non-master, we need that upstream branch instead :)
- sudo pip install -r docs/requirements.txt
script:
- hack/travis/dco.py
- hack/travis/gofmt.py
- make -sC docs SPHINXOPTS=-qW docs man
- hack/make.sh validate-dco
- hack/make.sh validate-gofmt
# vim:set sw=2 ts=2:
+2
View File
@@ -20,6 +20,7 @@ Andrew Munsell <andrew@wizardapps.net>
Andrews Medina <andrewsmedina@gmail.com>
Andy Chambers <anchambers@paypal.com>
andy diller <dillera@gmail.com>
Andy Goldstein <agoldste@redhat.com>
Andy Rothfusz <github@metaliveblog.com>
Andy Smith <github@anarkystic.com>
Anthony Bishopric <git@anthonybishopric.com>
@@ -44,6 +45,7 @@ Brian Olsen <brian@maven-group.org>
Brian Shumate <brian@couchbase.com>
Briehan Lombaard <briehan.lombaard@gmail.com>
Bruno Bigras <bigras.bruno@gmail.com>
Bryan Matsuo <bryan.matsuo@gmail.com>
Caleb Spare <cespare@gmail.com>
Calen Pennington <cale@edx.org>
Carl X. Su <bcbcarl@gmail.com>
+17
View File
@@ -1,5 +1,22 @@
# Changelog
## 0.11.1 (2014-05-07)
#### Registry
- Fix push and pull to private registry
## 0.11.0 (2014-05-07)
#### Notable features since 0.10.0
* SELinux support for mount and process labels
* Linked containers can be accessed by hostname
* Use the net `--net` flag to allow advanced network configuration such as host networking so that containers can use the host's network interfaces
* Add a ping endpoint to the Remote API to do healthchecks of your docker daemon
* Logs can now be returned with an optional timestamp
* Docker now works with registries that support SHA-512
* Multiple registry endpoints are supported to allow registry mirrors
## 0.10.0 (2014-04-08)
#### Builder
+5 -1
View File
@@ -82,7 +82,7 @@ editors have plugins that do this automatically, and there's also a git
pre-commit hook:
```
curl -o .git/hooks/pre-commit https://raw.github.com/edsrzf/gofmt-git-hook/master/fmt-check && chmod +x .git/hooks/pre-commit
curl -o .git/hooks/pre-commit https://raw.githubusercontent.com/edsrzf/gofmt-git-hook/master/fmt-check && chmod +x .git/hooks/pre-commit
```
Pull requests descriptions should be as clear as possible and include a
@@ -90,6 +90,10 @@ reference to all the issues that they address.
Pull requests must not contain commits from other users or branches.
Commit messages must start with a capitalized and short summary (max. 50
chars) written in the imperative, followed by an optional, more detailed
explanatory text which is separated from the summary by an empty line.
Code review comments may be added to your pull request. Discuss, then make the
suggested modifications and push additional commits to your feature branch. Be
sure to post a comment after pushing. The new commits will show up in the pull
+4
View File
@@ -42,6 +42,7 @@ RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -yq \
libcap-dev \
libsqlite3-dev \
mercurial \
pandoc \
reprepro \
ruby1.9.1 \
ruby1.9.1-dev \
@@ -82,6 +83,9 @@ RUN go get code.google.com/p/go.tools/cmd/cover
# TODO replace FPM with some very minimal debhelper stuff
RUN gem install --no-rdoc --no-ri fpm --version 1.0.2
# Get the "busybox" image source so we can build locally instead of pulling
RUN git clone https://github.com/jpetazzo/docker-busybox.git /docker-busybox
# Setup s3cmd config
RUN /bin/echo -e '[default]\naccess_key=$AWS_ACCESS_KEY\nsecret_key=$AWS_SECRET_KEY' > /.s3cfg
+1 -1
View File
@@ -1,4 +1,4 @@
Solomon Hykes <solomon@dotcloud.com> (@shykes)
Solomon Hykes <solomon@docker.com> (@shykes)
Guillaume J. Charmes <guillaume@docker.com> (@creack)
Victor Vieux <vieux@docker.com> (@vieux)
Michael Crosby <michael@crosbymichael.com> (@crosbymichael)
+19 -6
View File
@@ -1,4 +1,4 @@
.PHONY: all binary build cross default docs docs-build docs-shell shell test test-integration test-integration-cli
.PHONY: all binary build cross default docs docs-build docs-shell shell test test-unit test-integration test-integration-cli validate
# to allow `make BINDDIR=. shell` or `make BINDDIR= test`
BINDDIR := bundles
@@ -10,8 +10,9 @@ DOCKER_IMAGE := docker$(if $(GIT_BRANCH),:$(GIT_BRANCH))
DOCKER_DOCS_IMAGE := docker-docs$(if $(GIT_BRANCH),:$(GIT_BRANCH))
DOCKER_MOUNT := $(if $(BINDDIR),-v "$(CURDIR)/$(BINDDIR):/go/src/github.com/dotcloud/docker/$(BINDDIR)")
DOCKER_RUN_DOCKER := docker run --rm -it --privileged -e TESTFLAGS -e DOCKER_GRAPHDRIVER -e DOCKER_EXECDRIVER $(DOCKER_MOUNT) "$(DOCKER_IMAGE)"
DOCKER_RUN_DOCS := docker run --rm -it -p $(if $(DOCSPORT),$(DOCSPORT):)8000 "$(DOCKER_DOCS_IMAGE)"
DOCKER_RUN_DOCKER := docker run --rm -it --privileged -e TESTFLAGS -e TESTDIRS -e DOCKER_GRAPHDRIVER -e DOCKER_EXECDRIVER $(DOCKER_MOUNT) "$(DOCKER_IMAGE)"
# to allow `make DOCSDIR=docs docs-shell`
DOCKER_RUN_DOCS := docker run --rm -it $(if $(DOCSDIR),-v $(CURDIR)/$(DOCSDIR):/$(DOCSDIR)) -e AWS_S3_BUCKET
default: binary
@@ -25,13 +26,19 @@ cross: build
$(DOCKER_RUN_DOCKER) hack/make.sh binary cross
docs: docs-build
$(DOCKER_RUN_DOCS)
$(DOCKER_RUN_DOCS) -p $(if $(DOCSPORT),$(DOCSPORT):)8000 "$(DOCKER_DOCS_IMAGE)" mkdocs serve
docs-shell: docs-build
$(DOCKER_RUN_DOCS) bash
$(DOCKER_RUN_DOCS) -p $(if $(DOCSPORT),$(DOCSPORT):)8000 "$(DOCKER_DOCS_IMAGE)" bash
docs-release: docs-build
$(DOCKER_RUN_DOCS) "$(DOCKER_DOCS_IMAGE)" ./release.sh
test: build
$(DOCKER_RUN_DOCKER) hack/make.sh binary test test-integration test-integration-cli
$(DOCKER_RUN_DOCKER) hack/make.sh binary test-unit test-integration test-integration-cli
test-unit: build
$(DOCKER_RUN_DOCKER) hack/make.sh test-unit
test-integration: build
$(DOCKER_RUN_DOCKER) hack/make.sh test-integration
@@ -39,6 +46,9 @@ test-integration: build
test-integration-cli: build
$(DOCKER_RUN_DOCKER) hack/make.sh binary test-integration-cli
validate: build
$(DOCKER_RUN_DOCKER) hack/make.sh validate-gofmt validate-dco
shell: build
$(DOCKER_RUN_DOCKER) bash
@@ -46,6 +56,9 @@ build: bundles
docker build -t "$(DOCKER_IMAGE)" .
docs-build:
cp ./VERSION docs/VERSION
echo "$(GIT_BRANCH)" > docs/GIT_BRANCH
echo "$(AWS_S3_BUCKET)" > docs/AWS_S3_BUCKET
docker build -t "$(DOCKER_DOCS_IMAGE)" docs
bundles:
+1 -1
View File
@@ -18,7 +18,7 @@ It benefits directly from the experience accumulated over several years
of large-scale operation and support of hundreds of thousands of
applications and databases.
![Docker L](docs/theme/docker/static/img/dockerlogo-h.png "Docker")
![Docker L](docs/theme/mkdocs/img/logo_compressed.png "Docker")
## Better than VMs
+1 -1
View File
@@ -1 +1 @@
0.10.0
0.11.1
+7
View File
@@ -65,8 +65,13 @@ func NewDockerCli(in io.ReadCloser, out, err io.Writer, proto, addr string, tlsC
var (
isTerminal = false
terminalFd uintptr
scheme = "http"
)
if tlsConfig != nil {
scheme = "https"
}
if in != nil {
if file, ok := in.(*os.File); ok {
terminalFd = file.Fd()
@@ -86,6 +91,7 @@ func NewDockerCli(in io.ReadCloser, out, err io.Writer, proto, addr string, tlsC
isTerminal: isTerminal,
terminalFd: terminalFd,
tlsConfig: tlsConfig,
scheme: scheme,
}
}
@@ -99,4 +105,5 @@ type DockerCli struct {
isTerminal bool
terminalFd uintptr
tlsConfig *tls.Config
scheme string
}
+24 -15
View File
@@ -1491,7 +1491,8 @@ func (cli *DockerCli) CmdCommit(args ...string) error {
func (cli *DockerCli) CmdEvents(args ...string) error {
cmd := cli.Subcmd("events", "[OPTIONS]", "Get real time events from the server")
since := cmd.String([]string{"#since", "-since"}, "", "Show previously created events and then stream.")
since := cmd.String([]string{"#since", "-since"}, "", "Show all events created since timestamp")
until := cmd.String([]string{"-until"}, "", "Stream events until this timestamp")
if err := cmd.Parse(args); err != nil {
return nil
}
@@ -1500,22 +1501,27 @@ func (cli *DockerCli) CmdEvents(args ...string) error {
cmd.Usage()
return nil
}
v := url.Values{}
if *since != "" {
loc := time.FixedZone(time.Now().Zone())
var (
v = url.Values{}
loc = time.FixedZone(time.Now().Zone())
)
var setTime = func(key, value string) {
format := "2006-01-02 15:04:05 -0700 MST"
if len(*since) < len(format) {
format = format[:len(*since)]
if len(value) < len(format) {
format = format[:len(value)]
}
if t, err := time.ParseInLocation(format, *since, loc); err == nil {
v.Set("since", strconv.FormatInt(t.Unix(), 10))
if t, err := time.ParseInLocation(format, value, loc); err == nil {
v.Set(key, strconv.FormatInt(t.Unix(), 10))
} else {
v.Set("since", *since)
v.Set(key, value)
}
}
if *since != "" {
setTime("since", *since)
}
if *until != "" {
setTime("until", *until)
}
if err := cli.stream("GET", "/events?"+v.Encode(), nil, cli.out, nil); err != nil {
return err
}
@@ -1577,6 +1583,7 @@ func (cli *DockerCli) CmdDiff(args ...string) error {
func (cli *DockerCli) CmdLogs(args ...string) error {
cmd := cli.Subcmd("logs", "CONTAINER", "Fetch the logs of a container")
follow := cmd.Bool([]string{"f", "-follow"}, false, "Follow log output")
times := cmd.Bool([]string{"t", "-timestamps"}, false, "Show timestamps")
if err := cmd.Parse(args); err != nil {
return nil
}
@@ -1597,14 +1604,16 @@ func (cli *DockerCli) CmdLogs(args ...string) error {
}
v := url.Values{}
v.Set("logs", "1")
v.Set("stdout", "1")
v.Set("stderr", "1")
if *times {
v.Set("timestamps", "1")
}
if *follow && container.State.Running {
v.Set("stream", "1")
v.Set("follow", "1")
}
if err := cli.hijack("POST", "/containers/"+name+"/attach?"+v.Encode(), container.Config.Tty, nil, cli.out, cli.err, nil); err != nil {
if err := cli.streamHelper("GET", "/containers/"+name+"/logs?"+v.Encode(), container.Config.Tty, nil, cli.out, cli.err, nil); err != nil {
return err
}
return nil
+133
View File
@@ -0,0 +1,133 @@
package client
import (
"crypto/tls"
"fmt"
"io"
"net"
"net/http"
"net/http/httputil"
"os"
"runtime"
"strings"
"github.com/dotcloud/docker/api"
"github.com/dotcloud/docker/dockerversion"
"github.com/dotcloud/docker/pkg/term"
"github.com/dotcloud/docker/utils"
)
func (cli *DockerCli) dial() (net.Conn, error) {
if cli.tlsConfig != nil && cli.proto != "unix" {
return tls.Dial(cli.proto, cli.addr, cli.tlsConfig)
}
return net.Dial(cli.proto, cli.addr)
}
func (cli *DockerCli) hijack(method, path string, setRawTerminal bool, in io.ReadCloser, stdout, stderr io.Writer, started chan io.Closer) error {
defer func() {
if started != nil {
close(started)
}
}()
req, err := http.NewRequest(method, fmt.Sprintf("/v%s%s", api.APIVERSION, path), nil)
if err != nil {
return err
}
req.Header.Set("User-Agent", "Docker-Client/"+dockerversion.VERSION)
req.Header.Set("Content-Type", "plain/text")
req.Host = cli.addr
dial, err := cli.dial()
if err != nil {
if strings.Contains(err.Error(), "connection refused") {
return fmt.Errorf("Cannot connect to the Docker daemon. Is 'docker -d' running on this host?")
}
return err
}
clientconn := httputil.NewClientConn(dial, nil)
defer clientconn.Close()
// Server hijacks the connection, error 'connection closed' expected
clientconn.Do(req)
rwc, br := clientconn.Hijack()
defer rwc.Close()
if started != nil {
started <- rwc
}
var receiveStdout chan error
var oldState *term.State
if in != nil && setRawTerminal && cli.isTerminal && os.Getenv("NORAW") == "" {
oldState, err = term.SetRawTerminal(cli.terminalFd)
if err != nil {
return err
}
defer term.RestoreTerminal(cli.terminalFd, oldState)
}
if stdout != nil || stderr != nil {
receiveStdout = utils.Go(func() (err error) {
defer func() {
if in != nil {
if setRawTerminal && cli.isTerminal {
term.RestoreTerminal(cli.terminalFd, oldState)
}
// For some reason this Close call blocks on darwin..
// As the client exists right after, simply discard the close
// until we find a better solution.
if runtime.GOOS != "darwin" {
in.Close()
}
}
}()
// When TTY is ON, use regular copy
if setRawTerminal {
_, err = io.Copy(stdout, br)
} else {
_, err = utils.StdCopy(stdout, stderr, br)
}
utils.Debugf("[hijack] End of stdout")
return err
})
}
sendStdin := utils.Go(func() error {
if in != nil {
io.Copy(rwc, in)
utils.Debugf("[hijack] End of stdin")
}
if tcpc, ok := rwc.(*net.TCPConn); ok {
if err := tcpc.CloseWrite(); err != nil {
utils.Debugf("Couldn't send EOF: %s\n", err)
}
} else if unixc, ok := rwc.(*net.UnixConn); ok {
if err := unixc.CloseWrite(); err != nil {
utils.Debugf("Couldn't send EOF: %s\n", err)
}
}
// Discard errors due to pipe interruption
return nil
})
if stdout != nil || stderr != nil {
if err := <-receiveStdout; err != nil {
utils.Debugf("Error receiveStdout: %s", err)
return err
}
}
if !cli.isTerminal {
if err := <-sendStdin; err != nil {
utils.Debugf("Error sendStdin: %s", err)
return err
}
}
return nil
}
+28 -161
View File
@@ -2,7 +2,6 @@ package client
import (
"bytes"
"crypto/tls"
"encoding/base64"
"encoding/json"
"errors"
@@ -11,12 +10,9 @@ import (
"io/ioutil"
"net"
"net/http"
"net/http/httputil"
"net/url"
"os"
gosignal "os/signal"
"regexp"
goruntime "runtime"
"strconv"
"strings"
"syscall"
@@ -33,11 +29,14 @@ var (
ErrConnectionRefused = errors.New("Cannot connect to the Docker daemon. Is 'docker -d' running on this host?")
)
func (cli *DockerCli) dial() (net.Conn, error) {
if cli.tlsConfig != nil && cli.proto != "unix" {
return tls.Dial(cli.proto, cli.addr, cli.tlsConfig)
func (cli *DockerCli) HTTPClient() *http.Client {
tr := &http.Transport{
TLSClientConfig: cli.tlsConfig,
Dial: func(network, addr string) (net.Conn, error) {
return net.Dial(cli.proto, cli.addr)
},
}
return net.Dial(cli.proto, cli.addr)
return &http.Client{Transport: tr}
}
func (cli *DockerCli) call(method, path string, data interface{}, passAuthInfo bool) (io.ReadCloser, int, error) {
@@ -57,9 +56,6 @@ func (cli *DockerCli) call(method, path string, data interface{}, passAuthInfo b
}
}
}
// fixme: refactor client to support redirect
re := regexp.MustCompile("/+")
path = re.ReplaceAllString(path, "/")
req, err := http.NewRequest(method, fmt.Sprintf("/v%s%s", api.APIVERSION, path), params)
if err != nil {
@@ -86,28 +82,20 @@ func (cli *DockerCli) call(method, path string, data interface{}, passAuthInfo b
}
}
req.Header.Set("User-Agent", "Docker-Client/"+dockerversion.VERSION)
req.Host = cli.addr
req.URL.Host = cli.addr
req.URL.Scheme = cli.scheme
if data != nil {
req.Header.Set("Content-Type", "application/json")
} else if method == "POST" {
req.Header.Set("Content-Type", "plain/text")
}
dial, err := cli.dial()
resp, err := cli.HTTPClient().Do(req)
if err != nil {
if strings.Contains(err.Error(), "connection refused") {
return nil, -1, ErrConnectionRefused
}
return nil, -1, err
}
clientconn := httputil.NewClientConn(dial, nil)
resp, err := clientconn.Do(req)
if err != nil {
clientconn.Close()
if strings.Contains(err.Error(), "connection refused") {
return nil, -1, ErrConnectionRefused
}
return nil, -1, err
}
if resp.StatusCode < 200 || resp.StatusCode >= 400 {
body, err := ioutil.ReadAll(resp.Body)
@@ -119,31 +107,25 @@ func (cli *DockerCli) call(method, path string, data interface{}, passAuthInfo b
}
return nil, resp.StatusCode, fmt.Errorf("Error: %s", bytes.TrimSpace(body))
}
wrapper := utils.NewReadCloserWrapper(resp.Body, func() error {
if resp != nil && resp.Body != nil {
resp.Body.Close()
}
return clientconn.Close()
})
return wrapper, resp.StatusCode, nil
return resp.Body, resp.StatusCode, nil
}
func (cli *DockerCli) stream(method, path string, in io.Reader, out io.Writer, headers map[string][]string) error {
return cli.streamHelper(method, path, true, in, out, nil, headers)
}
func (cli *DockerCli) streamHelper(method, path string, setRawTerminal bool, in io.Reader, stdout, stderr io.Writer, headers map[string][]string) error {
if (method == "POST" || method == "PUT") && in == nil {
in = bytes.NewReader([]byte{})
}
// fixme: refactor client to support redirect
re := regexp.MustCompile("/+")
path = re.ReplaceAllString(path, "/")
req, err := http.NewRequest(method, fmt.Sprintf("/v%s%s", api.APIVERSION, path), in)
req, err := http.NewRequest(method, fmt.Sprintf("http://v%s%s", api.APIVERSION, path), in)
if err != nil {
return err
}
req.Header.Set("User-Agent", "Docker-Client/"+dockerversion.VERSION)
req.Host = cli.addr
req.URL.Host = cli.addr
req.URL.Scheme = cli.scheme
if method == "POST" {
req.Header.Set("Content-Type", "plain/text")
}
@@ -153,17 +135,7 @@ func (cli *DockerCli) stream(method, path string, in io.Reader, out io.Writer, h
req.Header[k] = v
}
}
dial, err := cli.dial()
if err != nil {
if strings.Contains(err.Error(), "connection refused") {
return fmt.Errorf("Cannot connect to the Docker daemon. Is 'docker -d' running on this host?")
}
return err
}
clientconn := httputil.NewClientConn(dial, nil)
resp, err := clientconn.Do(req)
defer clientconn.Close()
resp, err := cli.HTTPClient().Do(req)
if err != nil {
if strings.Contains(err.Error(), "connection refused") {
return fmt.Errorf("Cannot connect to the Docker daemon. Is 'docker -d' running on this host?")
@@ -184,126 +156,21 @@ func (cli *DockerCli) stream(method, path string, in io.Reader, out io.Writer, h
}
if api.MatchesContentType(resp.Header.Get("Content-Type"), "application/json") {
return utils.DisplayJSONMessagesStream(resp.Body, out, cli.terminalFd, cli.isTerminal)
return utils.DisplayJSONMessagesStream(resp.Body, stdout, cli.terminalFd, cli.isTerminal)
}
if _, err := io.Copy(out, resp.Body); err != nil {
if stdout != nil || stderr != nil {
// When TTY is ON, use regular copy
if setRawTerminal {
_, err = io.Copy(stdout, resp.Body)
} else {
_, err = utils.StdCopy(stdout, stderr, resp.Body)
}
utils.Debugf("[stream] End of stdout")
return err
}
return nil
}
func (cli *DockerCli) hijack(method, path string, setRawTerminal bool, in io.ReadCloser, stdout, stderr io.Writer, started chan io.Closer) error {
defer func() {
if started != nil {
close(started)
}
}()
// fixme: refactor client to support redirect
re := regexp.MustCompile("/+")
path = re.ReplaceAllString(path, "/")
req, err := http.NewRequest(method, fmt.Sprintf("/v%s%s", api.APIVERSION, path), nil)
if err != nil {
return err
}
req.Header.Set("User-Agent", "Docker-Client/"+dockerversion.VERSION)
req.Header.Set("Content-Type", "plain/text")
req.Host = cli.addr
dial, err := cli.dial()
if err != nil {
if strings.Contains(err.Error(), "connection refused") {
return fmt.Errorf("Cannot connect to the Docker daemon. Is 'docker -d' running on this host?")
}
return err
}
clientconn := httputil.NewClientConn(dial, nil)
defer clientconn.Close()
// Server hijacks the connection, error 'connection closed' expected
clientconn.Do(req)
rwc, br := clientconn.Hijack()
defer rwc.Close()
if started != nil {
started <- rwc
}
var receiveStdout chan error
var oldState *term.State
if in != nil && setRawTerminal && cli.isTerminal && os.Getenv("NORAW") == "" {
oldState, err = term.SetRawTerminal(cli.terminalFd)
if err != nil {
return err
}
defer term.RestoreTerminal(cli.terminalFd, oldState)
}
if stdout != nil || stderr != nil {
receiveStdout = utils.Go(func() (err error) {
defer func() {
if in != nil {
if setRawTerminal && cli.isTerminal {
term.RestoreTerminal(cli.terminalFd, oldState)
}
// For some reason this Close call blocks on darwin..
// As the client exists right after, simply discard the close
// until we find a better solution.
if goruntime.GOOS != "darwin" {
in.Close()
}
}
}()
// When TTY is ON, use regular copy
if setRawTerminal {
_, err = io.Copy(stdout, br)
} else {
_, err = utils.StdCopy(stdout, stderr, br)
}
utils.Debugf("[hijack] End of stdout")
return err
})
}
sendStdin := utils.Go(func() error {
if in != nil {
io.Copy(rwc, in)
utils.Debugf("[hijack] End of stdin")
}
if tcpc, ok := rwc.(*net.TCPConn); ok {
if err := tcpc.CloseWrite(); err != nil {
utils.Debugf("Couldn't send EOF: %s\n", err)
}
} else if unixc, ok := rwc.(*net.UnixConn); ok {
if err := unixc.CloseWrite(); err != nil {
utils.Debugf("Couldn't send EOF: %s\n", err)
}
}
// Discard errors due to pipe interruption
return nil
})
if stdout != nil || stderr != nil {
if err := <-receiveStdout; err != nil {
utils.Debugf("Error receiveStdout: %s", err)
return err
}
}
if !cli.isTerminal {
if err := <-sendStdin; err != nil {
utils.Debugf("Error sendStdin: %s", err)
return err
}
}
return nil
}
func (cli *DockerCli) resizeTty(id string) {
height, width := cli.getTtySize()
if height == 0 && width == 0 {
+1 -1
View File
@@ -10,7 +10,7 @@ import (
)
const (
APIVERSION version.Version = "1.10"
APIVERSION version.Version = "1.11"
DEFAULTHTTPHOST = "127.0.0.1"
DEFAULTUNIXSOCKET = "/var/run/docker.sock"
)
+58 -1
View File
@@ -3,7 +3,6 @@ package server
import (
"bufio"
"bytes"
"code.google.com/p/go.net/websocket"
"crypto/tls"
"crypto/x509"
"encoding/base64"
@@ -21,6 +20,8 @@ import (
"strings"
"syscall"
"code.google.com/p/go.net/websocket"
"github.com/dotcloud/docker/api"
"github.com/dotcloud/docker/engine"
"github.com/dotcloud/docker/pkg/listenbuffer"
@@ -246,6 +247,7 @@ func getEvents(eng *engine.Engine, version version.Version, w http.ResponseWrite
var job = eng.Job("events", r.RemoteAddr)
streamJSON(job, w, true)
job.Setenv("since", r.Form.Get("since"))
job.Setenv("until", r.Form.Get("until"))
return job.Run()
}
@@ -327,6 +329,48 @@ func getContainersJSON(eng *engine.Engine, version version.Version, w http.Respo
return nil
}
func getContainersLogs(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if err := parseForm(r); err != nil {
return err
}
if vars == nil {
return fmt.Errorf("Missing parameter")
}
var (
job = eng.Job("inspect", vars["name"], "container")
c, err = job.Stdout.AddEnv()
)
if err != nil {
return err
}
if err = job.Run(); err != nil {
return err
}
var outStream, errStream io.Writer
outStream = utils.NewWriteFlusher(w)
if c.GetSubEnv("Config") != nil && !c.GetSubEnv("Config").GetBool("Tty") && version.GreaterThanOrEqualTo("1.6") {
errStream = utils.NewStdWriter(outStream, utils.Stderr)
outStream = utils.NewStdWriter(outStream, utils.Stdout)
} else {
errStream = outStream
}
job = eng.Job("logs", vars["name"])
job.Setenv("follow", r.Form.Get("follow"))
job.Setenv("stdout", r.Form.Get("stdout"))
job.Setenv("stderr", r.Form.Get("stderr"))
job.Setenv("timestamps", r.Form.Get("timestamps"))
job.Stdout.Add(outStream)
job.Stderr.Set(errStream)
if err := job.Run(); err != nil {
fmt.Fprintf(outStream, "Error: %s\n", err)
}
return nil
}
func postImagesTag(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if err := parseForm(r); err != nil {
return err
@@ -930,6 +974,11 @@ func writeCorsHeaders(w http.ResponseWriter, r *http.Request) {
w.Header().Add("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT, OPTIONS")
}
func ping(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
_, err := w.Write([]byte{'O', 'K'})
return err
}
func makeHttpHandler(eng *engine.Engine, logging bool, localMethod string, localRoute string, handlerFunc HttpApiFunc, enableCors bool, dockerVersion version.Version) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
// log the request
@@ -998,6 +1047,7 @@ func createRouter(eng *engine.Engine, logging, enableCors bool, dockerVersion st
}
m := map[string]map[string]HttpApiFunc{
"GET": {
"/_ping": ping,
"/events": getEvents,
"/info": getInfo,
"/version": getVersion,
@@ -1013,6 +1063,7 @@ func createRouter(eng *engine.Engine, logging, enableCors bool, dockerVersion st
"/containers/{name:.*}/changes": getContainersChanges,
"/containers/{name:.*}/json": getContainersByName,
"/containers/{name:.*}/top": getContainersTop,
"/containers/{name:.*}/logs": getContainersLogs,
"/containers/{name:.*}/attach/ws": wsContainersAttach,
},
"POST": {
@@ -1220,6 +1271,9 @@ func ListenAndServe(proto, addr string, job *engine.Job) error {
// ServeApi loops through all of the protocols sent in to docker and spawns
// off a go routine to setup a serving http.Server for each.
func ServeApi(job *engine.Job) engine.Status {
if len(job.Args) == 0 {
return job.Errorf("usage: %s PROTO://ADDR [PROTO://ADDR ...]", job.Name)
}
var (
protoAddrs = job.Args
chErrors = make(chan error, len(protoAddrs))
@@ -1232,6 +1286,9 @@ func ServeApi(job *engine.Job) engine.Status {
for _, protoAddr := range protoAddrs {
protoAddrParts := strings.SplitN(protoAddr, "://", 2)
if len(protoAddrParts) != 2 {
return job.Errorf("usage: %s PROTO://ADDR [PROTO://ADDR ...]", job.Name)
}
go func() {
log.Printf("Listening for HTTP on %s (%s)\n", protoAddrParts[0], protoAddrParts[1])
chErrors <- ListenAndServe(protoAddrParts[0], protoAddrParts[1], job)
+47 -79
View File
@@ -1,14 +1,14 @@
package server
import (
"bytes"
"encoding/json"
"fmt"
"github.com/dotcloud/docker/api"
"github.com/dotcloud/docker/engine"
"github.com/dotcloud/docker/utils"
"io"
"net/http"
"net/http/httptest"
"os"
"testing"
)
@@ -57,15 +57,7 @@ func TesthttpError(t *testing.T) {
}
func TestGetVersion(t *testing.T) {
tmp, err := utils.TestDirectory("")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(tmp)
eng, err := engine.New(tmp)
if err != nil {
t.Fatal(err)
}
eng := engine.New()
var called bool
eng.Register("version", func(job *engine.Job) engine.Status {
called = true
@@ -80,49 +72,21 @@ func TestGetVersion(t *testing.T) {
}
return engine.StatusOK
})
r := httptest.NewRecorder()
req, err := http.NewRequest("GET", "/version", nil)
if err != nil {
t.Fatal(err)
}
// FIXME getting the version should require an actual running Server
if err := ServeRequest(eng, api.APIVERSION, r, req); err != nil {
t.Fatal(err)
}
r := serveRequest("GET", "/version", nil, eng, t)
if !called {
t.Fatalf("handler was not called")
}
out := engine.NewOutput()
v, err := out.AddEnv()
if err != nil {
t.Fatal(err)
v := readEnv(r.Body, t)
if v.Get("Version") != "42.1" {
t.Fatalf("%#v\n", v)
}
if _, err := io.Copy(out, r.Body); err != nil {
t.Fatal(err)
}
out.Close()
expected := "42.1"
if result := v.Get("Version"); result != expected {
t.Errorf("Expected version %s, %s found", expected, result)
}
expected = "application/json"
if result := r.HeaderMap.Get("Content-Type"); result != expected {
t.Errorf("Expected Content-Type %s, %s found", expected, result)
if r.HeaderMap.Get("Content-Type") != "application/json" {
t.Fatalf("%#v\n", r)
}
}
func TestGetInfo(t *testing.T) {
tmp, err := utils.TestDirectory("")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(tmp)
eng, err := engine.New(tmp)
if err != nil {
t.Fatal(err)
}
eng := engine.New()
var called bool
eng.Register("info", func(job *engine.Job) engine.Status {
called = true
@@ -134,47 +98,51 @@ func TestGetInfo(t *testing.T) {
}
return engine.StatusOK
})
r := httptest.NewRecorder()
req, err := http.NewRequest("GET", "/info", nil)
if err != nil {
t.Fatal(err)
}
// FIXME getting the version should require an actual running Server
if err := ServeRequest(eng, api.APIVERSION, r, req); err != nil {
t.Fatal(err)
}
r := serveRequest("GET", "/info", nil, eng, t)
if !called {
t.Fatalf("handler was not called")
}
v := readEnv(r.Body, t)
if v.GetInt("Images") != 42000 {
t.Fatalf("%#v\n", v)
}
if v.GetInt("Containers") != 1 {
t.Fatalf("%#v\n", v)
}
if r.HeaderMap.Get("Content-Type") != "application/json" {
t.Fatalf("%#v\n", r)
}
}
out := engine.NewOutput()
i, err := out.AddEnv()
func serveRequest(method, target string, body io.Reader, eng *engine.Engine, t *testing.T) *httptest.ResponseRecorder {
r := httptest.NewRecorder()
req, err := http.NewRequest(method, target, body)
if err != nil {
t.Fatal(err)
}
if _, err := io.Copy(out, r.Body); err != nil {
if err := ServeRequest(eng, api.APIVERSION, r, req); err != nil {
t.Fatal(err)
}
return r
}
func readEnv(src io.Reader, t *testing.T) *engine.Env {
out := engine.NewOutput()
v, err := out.AddEnv()
if err != nil {
t.Fatal(err)
}
if _, err := io.Copy(out, src); err != nil {
t.Fatal(err)
}
out.Close()
{
expected := 42000
result := i.GetInt("Images")
if expected != result {
t.Fatalf("%#v\n", result)
}
}
{
expected := 1
result := i.GetInt("Containers")
if expected != result {
t.Fatalf("%#v\n", result)
}
}
{
expected := "application/json"
if result := r.HeaderMap.Get("Content-Type"); result != expected {
t.Fatalf("%#v\n", result)
}
}
return v
}
func toJson(data interface{}, t *testing.T) io.Reader {
var buf bytes.Buffer
if err := json.NewEncoder(&buf).Encode(data); err != nil {
t.Fatal(err)
}
return &buf
}
+1 -1
View File
@@ -68,7 +68,7 @@ func ApplyLayer(dest string, layer ArchiveReader) error {
parent := filepath.Dir(hdr.Name)
parentPath := filepath.Join(dest, parent)
if _, err := os.Lstat(parentPath); err != nil && os.IsNotExist(err) {
err = os.MkdirAll(parentPath, 600)
err = os.MkdirAll(parentPath, 0600)
if err != nil {
return err
}
+17 -9
View File
@@ -2,19 +2,25 @@ package builtins
import (
api "github.com/dotcloud/docker/api/server"
"github.com/dotcloud/docker/daemon/networkdriver/bridge"
"github.com/dotcloud/docker/engine"
"github.com/dotcloud/docker/runtime/networkdriver/bridge"
"github.com/dotcloud/docker/registry"
"github.com/dotcloud/docker/server"
)
func Register(eng *engine.Engine) {
daemon(eng)
remote(eng)
func Register(eng *engine.Engine) error {
if err := daemon(eng); err != nil {
return err
}
if err := remote(eng); err != nil {
return err
}
return registry.NewService().Install(eng)
}
// remote: a RESTful api for cross-docker communication
func remote(eng *engine.Engine) {
eng.Register("serveapi", api.ServeApi)
func remote(eng *engine.Engine) error {
return eng.Register("serveapi", api.ServeApi)
}
// daemon: a default execution and storage backend for Docker on Linux,
@@ -32,7 +38,9 @@ func remote(eng *engine.Engine) {
//
// These components should be broken off into plugins of their own.
//
func daemon(eng *engine.Engine) {
eng.Register("initserver", server.InitServer)
eng.Register("init_networkdriver", bridge.InitDriver)
func daemon(eng *engine.Engine) error {
if err := eng.Register("initserver", server.InitServer); err != nil {
return err
}
return eng.Register("init_networkdriver", bridge.InitDriver)
}
+18 -11
View File
@@ -4,7 +4,13 @@ set -e
# bits of this were adapted from lxc-checkconfig
# see also https://github.com/lxc/lxc/blob/lxc-1.0.2/src/lxc/lxc-checkconfig.in
: ${CONFIG:=/proc/config.gz}
possibleConfigs=(
'/proc/config.gz'
"/boot/config-$(uname -r)"
"/usr/src/linux-$(uname -r)/.config"
'/usr/src/linux/.config'
)
: ${CONFIG:="${possibleConfigs[0]}"}
if ! command -v zgrep &> /dev/null; then
zgrep() {
@@ -74,11 +80,7 @@ check_flags() {
if [ ! -e "$CONFIG" ]; then
wrap_warning "warning: $CONFIG does not exist, searching other paths for kernel config..."
for tryConfig in \
'/proc/config.gz' \
"/boot/config-$(uname -r)" \
'/usr/src/linux/.config' \
; do
for tryConfig in "${possibleConfigs[@]}"; do
if [ -e "$tryConfig" ]; then
CONFIG="$tryConfig"
break
@@ -98,12 +100,16 @@ echo
echo 'Generally Necessary:'
echo -n '- '
cgroupCpuDir="$(awk '/[, ]cpu([, ]|$)/ && $8 == "cgroup" { print $5 }' /proc/$$/mountinfo | head -n1)"
cgroupDir="$(dirname "$cgroupCpuDir")"
if [ -d "$cgroupDir/cpu" ]; then
cgroupSubsystemDir="$(awk '/[, ](cpu|cpuacct|cpuset|devices|freezer|memory)([, ]|$)/ && $8 == "cgroup" { print $5 }' /proc/$$/mountinfo | head -n1)"
cgroupDir="$(dirname "$cgroupSubsystemDir")"
if [ -d "$cgroupDir/cpu" -o -d "$cgroupDir/cpuacct" -o -d "$cgroupDir/cpuset" -o -d "$cgroupDir/devices" -o -d "$cgroupDir/freezer" -o -d "$cgroupDir/memory" ]; then
echo "$(wrap_good 'cgroup hierarchy' 'properly mounted') [$cgroupDir]"
else
echo "$(wrap_bad 'cgroup hierarchy' 'single mountpoint!') [$cgroupCpuDir]"
if [ "$cgroupSubsystemDir" ]; then
echo "$(wrap_bad 'cgroup hierarchy' 'single mountpoint!') [$cgroupSubsystemDir]"
else
echo "$(wrap_bad 'cgroup hierarchy' 'nonexistent??')"
fi
echo " $(wrap_color '(see https://github.com/tianon/cgroupfs-mount)' yellow)"
fi
@@ -112,7 +118,8 @@ flags=(
DEVPTS_MULTIPLE_INSTANCES
CGROUPS CGROUP_DEVICE
MACVLAN VETH BRIDGE
IP_NF_TARGET_MASQUERADE NETFILTER_XT_MATCH_{ADDRTYPE,CONNTRACK}
NF_NAT_IPV4 IP_NF_TARGET_MASQUERADE
NETFILTER_XT_MATCH_{ADDRTYPE,CONNTRACK}
NF_NAT NF_NAT_NEEDED
)
check_flags "${flags[@]}"
+1 -1
View File
@@ -3,7 +3,7 @@ package main
import (
"flag"
"fmt"
"github.com/dotcloud/docker/runtime/graphdriver/devmapper"
"github.com/dotcloud/docker/daemon/graphdriver/devmapper"
"os"
"path"
"sort"
+2
View File
@@ -0,0 +1,2 @@
# these are generated by the md/md2man-all.sh script
man*
+5
View File
@@ -0,0 +1,5 @@
FROM fedora:20
MAINTAINER ipbabble <emailwhenry@redhat.com>
# Update and install pandoc
RUN yum -y update; yum clean all;
RUN yum -y install pandoc;
+71
View File
@@ -0,0 +1,71 @@
Docker Documentation
====================
This directory contains the Docker user manual in the Markdown format.
Do *not* edit the man pages in the man1 directory. Instead, amend the
Markdown (*.md) files.
# File List
docker.md
docker-attach.md
docker-build.md
docker-commit.md
docker-cp.md
docker-diff.md
docker-events.md
docker-export.md
docker-history.md
docker-images.md
docker-import.md
docker-info.md
docker-inspect.md
docker-kill.md
docker-load.md
docker-login.md
docker-logs.md
docker-port.md
docker-ps.md
docker-pull.md
docker-push.md
docker-restart.md
docker-rmi.md
docker-rm.md
docker-run.md
docker-save.md
docker-search.md
docker-start.md
docker-stop.md
docker-tag.md
docker-top.md
docker-wait.md
Dockerfile
md2man-all.sh
# Generating man pages from the Markdown files
The recommended approach for generating the man pages is via a Docker
container. Using the supplied Dockerfile, Docker will create a Fedora based
container and isolate the Pandoc installation. This is a seamless process,
saving you from dealing with Pandoc and dependencies on your own computer.
## Building the Fedora / Pandoc image
There is a Dockerfile provided in the `docker/contrib/man/md` directory.
Using this Dockerfile, create a Docker image tagged `fedora/pandoc`:
docker build -t fedora/pandoc .
## Utilizing the Fedora / Pandoc image
Once the image is built, run a container using the image with *volumes*:
docker run -v /<path-to-git-dir>/docker/contrib/man:/pandoc:rw \
-w /pandoc -i fedora/pandoc /pandoc/md/md2man-all.sh
The Pandoc Docker container will process the Markdown files and generate
the man pages inside the `docker/contrib/man/man1` directory using
Docker volumes. For more information on Docker volumes see the man page for
`docker run` and also look at the article [Sharing Directories via Volumes]
(http://docs.docker.io/use/working_with_volumes/).
+57
View File
@@ -0,0 +1,57 @@
% DOCKER(1) Docker User Manuals
% William Henry
% APRIL 2014
# NAME
docker-attach - Attach to a running container
# SYNOPSIS
**docker attach** **--no-stdin**[=*false*] **--sig-proxy**[=*true*] CONTAINER
# DESCRIPTION
If you **docker run** a container in detached mode (**-d**), you can reattach to
the detached container with **docker attach** using the container's ID or name.
You can detach from the container again (and leave it running) with `CTRL-c` (for
a quiet exit) or `CTRL-\` to get a stacktrace of the Docker client when it quits.
When you detach from a container the exit code will be returned to
the client.
# OPTIONS
**--no-stdin**=*true*|*false*
When set to true, do not attach to stdin. The default is *false*.
**--sig-proxy**=*true*|*false*:
When set to true, proxify all received signal to the process (even in non-tty
mode). The default is *true*.
# EXAMPLES
## Attaching to a container
In this example the top command is run inside a container, from an image called
fedora, in detached mode. The ID from the container is passed into the **docker
attach** command:
# ID=$(sudo docker run -d fedora /usr/bin/top -b)
# sudo docker attach $ID
top - 02:05:52 up 3:05, 0 users, load average: 0.01, 0.02, 0.05
Tasks: 1 total, 1 running, 0 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.1%us, 0.2%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 373572k total, 355560k used, 18012k free, 27872k buffers
Swap: 786428k total, 0k used, 786428k free, 221740k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 17200 1116 912 R 0 0.3 0:00.03 top
top - 02:05:55 up 3:05, 0 users, load average: 0.01, 0.02, 0.05
Tasks: 1 total, 1 running, 0 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.2%sy, 0.0%ni, 99.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 373572k total, 355244k used, 18328k free, 27872k buffers
Swap: 786428k total, 0k used, 786428k free, 221776k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 17208 1144 932 R 0 0.3 0:00.03 top
# HISTORY
April 2014, Originally compiled by William Henry (whenry at redhat dot com)
based on docker.io source material and internal work.
+82
View File
@@ -0,0 +1,82 @@
% DOCKER(1) Docker User Manuals
% William Henry
% APRIL 2014
# NAME
docker-build - Build a container image from a Dockerfile source at PATH
# SYNOPSIS
**docker build** [**--no-cache**[=*false*]] [**-q**|**--quiet**[=*false*]]
[**--rm**] [**-t**|**--tag**=TAG] PATH | URL | -
# DESCRIPTION
This will read the Dockerfile from the directory specified in **PATH**.
It also sends any other files and directories found in the current
directory to the Docker daemon. The contents of this directory would
be used by **ADD** commands found within the Dockerfile.
Warning, this will send a lot of data to the Docker daemon depending
on the contents of the current directory. The build is run by the Docker
daemon, not by the CLI, so the whole context must be transferred to the daemon.
The Docker CLI reports "Uploading context" when the context is sent to
the daemon.
When a single Dockerfile is given as the URL, then no context is set.
When a Git repository is set as the **URL**, the repository is used
as context.
# OPTIONS
**-q**, **--quiet**=*true*|*false*
When set to true, suppress verbose build output. Default is *false*.
**--rm**=*true*|*false*
When true, remove intermediate containers that are created during the
build process. The default is true.
**-t**, **--tag**=*tag*
Tag to be applied to the resulting image on successful completion of
the build.
**--no-cache**=*true*|*false*
When set to true, do not use a cache when building the image. The
default is *false*.
# EXAMPLES
## Building an image using a Dockefile located inside the current directory
Docker images can be built using the build command and a Dockerfile:
docker build .
During the build process Docker creates intermediate images. In order to
keep them, you must explicitly set `--rm=false`.
docker build --rm=false .
A good practice is to make a sub-directory with a related name and create
the Dockerfile in that directory. For example, a directory called mongo may
contain a Dockerfile to create a Docker MongoDB image. Likewise, another
directory called httpd may be used to store Dockerfiles for Apache web
server images.
It is also a good practice to add the files required for the image to the
sub-directory. These files will then be specified with the `ADD` instruction
in the Dockerfile. Note: If you include a tar file (a good practice!), then
Docker will automatically extract the contents of the tar file
specified within the `ADD` instruction into the specified target.
## Building an image using a URL
This will clone the specified Github repository from the URL and use it
as context. The Dockerfile at the root of the repository is used as
Dockerfile. This only works if the Github repository is a dedicated
repository.
docker build github.com/scollier/Fedora-Dockerfiles/tree/master/apache
Note: You can set an arbitrary Git repository via the `git://` schema.
# HISTORY
March 2014, Originally compiled by William Henry (whenry at redhat dot com)
based on docker.io source material and internal work.
+34
View File
@@ -0,0 +1,34 @@
% DOCKER(1) Docker User Manuals
% William Henry
% APRIL 2014
# NAME
docker-commit - Create a new image from the changes to an existing
container
# SYNOPSIS
**docker commit** **-a**|**--author**[=""] **-m**|**--message**[=""]
CONTAINER [REPOSITORY[:TAG]]
# DESCRIPTION
Using an existing container's name or ID you can create a new image.
# OPTIONS
**-a, --author**=""
Author name. (eg. "John Hannibal Smith <hannibal@a-team.com>"
**-m, --message**=""
Commit message
# EXAMPLES
## Creating a new image from an existing container
An existing Fedora based container has had Apache installed while running
in interactive mode with the bash shell. Apache is also running. To
create a new image run docker ps to find the container's ID and then run:
# docker commit -me= "Added Apache to Fedora base image" \
--a="A D Ministrator" 98bd7fc99854 fedora/fedora_httpd:20
# HISTORY
April 2014, Originally compiled by William Henry (whenry at redhat dot com)
based on docker.io source material and in
+24
View File
@@ -0,0 +1,24 @@
% DOCKER(1) Docker User Manuals
% William Henry
% APRIL 2014
# NAME
docker-cp - Copy files/folders from the PATH to the HOSTPATH
# SYNOPSIS
**docker cp** CONTAINER:PATH HOSTPATH
# DESCRIPTION
Copy files/folders from the containers filesystem to the host
path. Paths are relative to the root of the filesystem. Files
can be copied from a running or stopped container.
# EXAMPLE
An important shell script file, created in a bash shell, is copied from
the exited container to the current dir on the host:
# docker cp c071f3c3ee81:setup.sh .
# HISTORY
April 2014, Originally compiled by William Henry (whenry at redhat dot com)
based on docker.io source material and internal work.
+44
View File
@@ -0,0 +1,44 @@
% DOCKER(1) Docker User Manuals
% William Henry
% APRIL 2014
# NAME
docker-diff - Inspect changes on a container's filesystem
# SYNOPSIS
**docker diff** CONTAINER
# DESCRIPTION
Inspect changes on a container's filesystem. You can use the full or
shortened container ID or the container name set using
**docker run --name** option.
# EXAMPLE
Inspect the changes to on a nginx container:
# docker diff 1fdfd1f54c1b
C /dev
C /dev/console
C /dev/core
C /dev/stdout
C /dev/fd
C /dev/ptmx
C /dev/stderr
C /dev/stdin
C /run
A /run/nginx.pid
C /var/lib/nginx/tmp
A /var/lib/nginx/tmp/client_body
A /var/lib/nginx/tmp/fastcgi
A /var/lib/nginx/tmp/proxy
A /var/lib/nginx/tmp/scgi
A /var/lib/nginx/tmp/uwsgi
C /var/log/nginx
A /var/log/nginx/access.log
A /var/log/nginx/error.log
# HISTORY
April 2014, Originally compiled by William Henry (whenry at redhat dot com)
based on docker.io source material and internal work.
+46
View File
@@ -0,0 +1,46 @@
% DOCKER(1) Docker User Manuals
% William Henry
% APRIL 2014
# NAME
docker-events - Get real time events from the server
**docker events** **--since**=""|*epoch-time*
# DESCRIPTION
Get event information from the Docker daemon. Information can include historical
information and real-time information.
# OPTIONS
**--since**=""
Show previously created events and then stream. This can be in either
seconds since epoch, or date string.
# EXAMPLES
## Listening for Docker events
After running docker events a container 786d698004576 is started and stopped
(The container name has been shortened in the ouput below):
# docker events
[2014-04-12 18:23:04 -0400 EDT] 786d69800457: (from whenry/testimage:latest) start
[2014-04-12 18:23:13 -0400 EDT] 786d69800457: (from whenry/testimage:latest) die
[2014-04-12 18:23:13 -0400 EDT] 786d69800457: (from whenry/testimage:latest) stop
## Listening for events since a given date
Again the output container IDs have been shortened for the purposes of this document:
# docker events --since '2014-04-12'
[2014-04-12 18:11:28 -0400 EDT] c655dbf640dc: (from whenry/testimage:latest) create
[2014-04-12 18:11:28 -0400 EDT] c655dbf640dc: (from whenry/testimage:latest) start
[2014-04-12 18:14:13 -0400 EDT] 786d69800457: (from whenry/testimage:latest) create
[2014-04-12 18:14:13 -0400 EDT] 786d69800457: (from whenry/testimage:latest) start
[2014-04-12 18:22:44 -0400 EDT] 786d69800457: (from whenry/testimage:latest) die
[2014-04-12 18:22:44 -0400 EDT] 786d69800457: (from whenry/testimage:latest) stop
[2014-04-12 18:23:04 -0400 EDT] 786d69800457: (from whenry/testimage:latest) start
[2014-04-12 18:23:13 -0400 EDT] 786d69800457: (from whenry/testimage:latest) die
[2014-04-12 18:23:13 -0400 EDT] 786d69800457: (from whenry/testimage:latest) stop
# HISTORY
April 2014, Originally compiled by William Henry (whenry at redhat dot com)
based on docker.io source material and internal work.
+26
View File
@@ -0,0 +1,26 @@
% DOCKER(1) Docker User Manuals
% William Henry
% APRIL 2014
# NAME
docker-export - Export the contents of a filesystem as a tar archive to
STDOUT.
# SYNOPSIS
**docker export** CONTAINER
# DESCRIPTION
Export the contents of a container's filesystem using the full or shortened
container ID or container name. The output is exported to STDOUT and can be
redirected to a tar file.
# EXAMPLE
Export the contents of the container called angry_bell to a tar file
called test.tar:
# docker export angry_bell > test.tar
# ls *.tar
test.tar
# HISTORY
April 2014, Originally compiled by William Henry (whenry at redhat dot com)
based on docker.io source material and internal work.
+32
View File
@@ -0,0 +1,32 @@
% DOCKER(1) Docker User Manuals
% William Henry
% APRIL 2014
# NAME
docker-history - Show the history of an image
# SYNOPSIS
**docker history** **--no-trunc**[=*false*] [**-q**|**--quiet**[=*false*]]
IMAGE
# DESCRIPTION
Show the history of when and how an image was created.
# OPTIONS
**--no-trunc**=*true*|*false*
When true don't truncate output. Default is false
**-q**, **--quiet=*true*|*false*
When true only show numeric IDs. Default is false.
# EXAMPLE
$ sudo docker history fedora
IMAGE CREATED CREATED BY SIZE
105182bb5e8b 5 days ago /bin/sh -c #(nop) ADD file:71356d2ad59aa3119d 372.7 MB
73bd853d2ea5 13 days ago /bin/sh -c #(nop) MAINTAINER Lokesh Mandvekar 0 B
511136ea3c5a 10 months ago 0 B
# HISTORY
April 2014, Originally compiled by William Henry (whenry at redhat dot com)
based on docker.io source material and internal work.
+99
View File
@@ -0,0 +1,99 @@
% DOCKER(1) Docker User Manuals
% William Henry
% APRIL 2014
# NAME
docker-images - List the images in the local repository
# SYNOPSIS
**docker images**
[**-a**|**--all**=*false*]
[**--no-trunc**[=*false*]
[**-q**|**--quiet**[=*false*]
[**-t**|**--tree**=*false*]
[**-v**|**--viz**=*false*]
[NAME]
# DESCRIPTION
This command lists the images stored in the local Docker repository.
By default, intermediate images, used during builds, are not listed. Some of the
output, e.g. image ID, is truncated, for space reasons. However the truncated
image ID, and often the first few characters, are enough to be used in other
Docker commands that use the image ID. The output includes repository, tag, image
ID, date created and the virtual size.
The title REPOSITORY for the first title may seem confusing. It is essentially
the image name. However, because you can tag a specific image, and multiple tags
(image instances) can be associated with a single name, the name is really a
repository for all tagged images of the same name. For example consider an image
called fedora. It may be tagged with 18, 19, or 20, etc. to manage different
versions.
# OPTIONS
**-a**, **--all**=*true*|*false*
When set to true, also include all intermediate images in the list. The
default is false.
**--no-trunc**=*true*|*false*
When set to true, list the full image ID and not the truncated ID. The
default is false.
**-q**, **--quiet**=*true*|*false*
When set to true, list the complete image ID as part of the output. The
default is false.
**-t**, **--tree**=*true*|*false*
When set to true, list the images in a tree dependency tree (hierarchy)
format. The default is false.
**-v**, **--viz**=*true*|*false*
When set to true, list the graph in graphviz format. The default is
*false*.
# EXAMPLES
## Listing the images
To list the images in a local repository (not the registry) run:
docker images
The list will contain the image repository name, a tag for the image, and an
image ID, when it was created and its virtual size. Columns: REPOSITORY, TAG,
IMAGE ID, CREATED, and VIRTUAL SIZE.
To get a verbose list of images which contains all the intermediate images
used in builds use **-a**:
docker images -a
## List images dependency tree hierarchy
To list the images in the local repository (not the registry) in a dependency
tree format, use the **-t** option.
docker images -t
This displays a staggered hierarchy tree where the less indented image is
the oldest with dependent image layers branching inward (to the right) on
subsequent lines. The newest or top level image layer is listed last in
any tree branch.
## List images in GraphViz format
To display the list in a format consumable by a GraphViz tools run with
**-v**. For example to produce a .png graph file of the hierarchy use:
docker images --viz | dot -Tpng -o docker.png
## Listing only the shortened image IDs
Listing just the shortened image IDs. This can be useful for some automated
tools.
docker images -q
# HISTORY
April 2014, Originally compiled by William Henry (whenry at redhat dot com)
based on docker.io source material and internal work.
+39
View File
@@ -0,0 +1,39 @@
% DOCKER(1) Docker User Manuals
% William Henry
% APRIL 2014
# NAME
docker-import - Create an empty filesystem image and import the contents
of the tarball into it.
# SYNOPSIS
**docker import** URL|- [REPOSITORY[:TAG]]
# DESCRIPTION
Create a new filesystem image from the contents of a tarball (.tar,
.tar.gz, .tgz, .bzip, .tar.xz, .txz) into it, then optionally tag it.
# EXAMPLES
## Import from a remote location
# docker import http://example.com/exampleimage.tgz example/imagerepo
## Import from a local file
Import to docker via pipe and stdin:
# cat exampleimage.tgz | docker import - example/imagelocal
## Import from a local file and tag
Import to docker via pipe and stdin:
# cat exampleimageV2.tgz | docker import - example/imagelocal:V-2.0
## Import from a local directory
# tar -c . | docker import - exampleimagedir
# HISTORY
April 2014, Originally compiled by William Henry (whenry at redhat dot com)
based on docker.io source material and internal work.
+46
View File
@@ -0,0 +1,46 @@
% DOCKER(1) Docker User Manuals
% William Henry
% APRIL 2014
# NAME
docker-info - Display system wide information
# SYNOPSIS
**docker info**
# DESCRIPTION
This command displays system wide information regarding the Docker installation.
Information displayed includes the number of containers and images, pool name,
data file, metadata file, data space used, total data space, metadata space used
, total metadata space, execution driver, and the kernel version.
The data file is where the images are stored and the metadata file is where the
meta data regarding those images are stored. When run for the first time Docker
allocates a certain amount of data space and meta data space from the space
available on the volume where `/var/lib/docker` is mounted.
# OPTIONS
There are no available options.
# EXAMPLES
## Display Docker system information
Here is a sample output:
# docker info
Containers: 18
Images: 95
Storage Driver: devicemapper
Pool Name: docker-8:1-170408448-pool
Data file: /var/lib/docker/devicemapper/devicemapper/data
Metadata file: /var/lib/docker/devicemapper/devicemapper/metadata
Data Space Used: 9946.3 Mb
Data Space Total: 102400.0 Mb
Metadata Space Used: 9.9 Mb
Metadata Space Total: 2048.0 Mb
Execution Driver: native-0.1
Kernel Version: 3.10.0-116.el7.x86_64
# HISTORY
April 2014, Originally compiled by William Henry (whenry at redhat dot com)
based on docker.io source material and internal work.
+229
View File
@@ -0,0 +1,229 @@
% DOCKER(1) Docker User Manuals
% William Henry
% APRIL 2014
# NAME
docker-inspect - Return low-level information on a container/image
# SYNOPSIS
**docker inspect** [**-f**|**--format**="" CONTAINER|IMAGE
[CONTAINER|IMAGE...]
# DESCRIPTION
This displays all the information available in Docker for a given
container or image. By default, this will render all results in a JSON
array. If a format is specified, the given template will be executed for
each result.
# OPTIONS
**-f**, **--format**=""
The text/template package of Go describes all the details of the
format. See examples section
# EXAMPLES
## Getting information on a container
To get information on a container use it's ID or instance name:
#docker inspect 1eb5fabf5a03
[{
"ID": "1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b",
"Created": "2014-04-04T21:33:52.02361335Z",
"Path": "/usr/sbin/nginx",
"Args": [],
"Config": {
"Hostname": "1eb5fabf5a03",
"Domainname": "",
"User": "",
"Memory": 0,
"MemorySwap": 0,
"CpuShares": 0,
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"PortSpecs": null,
"ExposedPorts": {
"80/tcp": {}
},
"Tty": true,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"HOME=/",
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": [
"/usr/sbin/nginx"
],
"Dns": null,
"DnsSearch": null,
"Image": "summit/nginx",
"Volumes": null,
"VolumesFrom": "",
"WorkingDir": "",
"Entrypoint": null,
"NetworkDisabled": false,
"OnBuild": null,
"Context": {
"mount_label": "system_u:object_r:svirt_sandbox_file_t:s0:c0,c650",
"process_label": "system_u:system_r:svirt_lxc_net_t:s0:c0,c650"
}
},
"State": {
"Running": true,
"Pid": 858,
"ExitCode": 0,
"StartedAt": "2014-04-04T21:33:54.16259207Z",
"FinishedAt": "0001-01-01T00:00:00Z",
"Ghost": false
},
"Image": "df53773a4390e25936f9fd3739e0c0e60a62d024ea7b669282b27e65ae8458e6",
"NetworkSettings": {
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"Gateway": "172.17.42.1",
"Bridge": "docker0",
"PortMapping": null,
"Ports": {
"80/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "80"
}
]
}
},
"ResolvConfPath": "/etc/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b/hostname",
"HostsPath": "/var/lib/docker/containers/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b/hosts",
"Name": "/ecstatic_ptolemy",
"Driver": "devicemapper",
"ExecDriver": "native-0.1",
"Volumes": {},
"VolumesRW": {},
"HostConfig": {
"Binds": null,
"ContainerIDFile": "",
"LxcConf": [],
"Privileged": false,
"PortBindings": {
"80/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "80"
}
]
},
"Links": null,
"PublishAllPorts": false,
"DriverOptions": {
"lxc": null
},
"CliAddress": ""
}
## Getting the IP address of a container instance
To get the IP address of a container use:
# docker inspect --format='{{.NetworkSettings.IPAddress}}' 1eb5fabf5a03
172.17.0.2
## Listing all port bindings
One can loop over arrays and maps in the results to produce simple text
output:
# docker inspect --format='{{range $p, $conf := .NetworkSettings.Ports}} \
{{$p}} -> {{(index $conf 0).HostPort}} {{end}}' 1eb5fabf5a03
80/tcp -> 80
## Getting information on an image
Use an image's ID or name (e.g. repository/name[:tag]) to get information
on it.
# docker inspect 58394af37342
[{
"id": "58394af373423902a1b97f209a31e3777932d9321ef10e64feaaa7b4df609cf9",
"parent": "8abc22bad04266308ff408ca61cb8f6f4244a59308f7efc64e54b08b496c58db",
"created": "2014-02-03T16:10:40.500814677Z",
"container": "f718f19a28a5147da49313c54620306243734bafa63c76942ef6f8c4b4113bc5",
"container_config": {
"Hostname": "88807319f25e",
"Domainname": "",
"User": "",
"Memory": 0,
"MemorySwap": 0,
"CpuShares": 0,
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"PortSpecs": null,
"ExposedPorts": null,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"HOME=/",
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": [
"/bin/sh",
"-c",
"#(nop) ADD fedora-20-dummy.tar.xz in /"
],
"Dns": null,
"DnsSearch": null,
"Image": "8abc22bad04266308ff408ca61cb8f6f4244a59308f7efc64e54b08b496c58db",
"Volumes": null,
"VolumesFrom": "",
"WorkingDir": "",
"Entrypoint": null,
"NetworkDisabled": false,
"OnBuild": null,
"Context": null
},
"docker_version": "0.6.3",
"author": "I P Babble \u003clsm5@ipbabble.com\u003e - ./buildcontainers.sh",
"config": {
"Hostname": "88807319f25e",
"Domainname": "",
"User": "",
"Memory": 0,
"MemorySwap": 0,
"CpuShares": 0,
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"PortSpecs": null,
"ExposedPorts": null,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"HOME=/",
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": null,
"Dns": null,
"DnsSearch": null,
"Image": "8abc22bad04266308ff408ca61cb8f6f4244a59308f7efc64e54b08b496c58db",
"Volumes": null,
"VolumesFrom": "",
"WorkingDir": "",
"Entrypoint": null,
"NetworkDisabled": false,
"OnBuild": null,
"Context": null
},
"architecture": "x86_64",
"Size": 385520098
}]
# HISTORY
April 2014, Originally compiled by William Henry (whenry at redhat dot com)
based on docker.io source material and internal work.
+21
View File
@@ -0,0 +1,21 @@
% DOCKER(1) Docker User Manuals
% William Henry
% APRIL 2014
# NAME
docker-kill - Kill a running container (send SIGKILL, or specified signal)
# SYNOPSIS
**docker kill** **--signal**[=*"KILL"*] CONTAINER [CONTAINER...]
# DESCRIPTION
The main process inside each container specified will be sent SIGKILL,
or any signal specified with option --signal.
# OPTIONS
**-s**, **--signal**=*"KILL"*
Signal to send to the container
# HISTORY
April 2014, Originally compiled by William Henry (whenry at redhat dot com)
based on docker.io source material and internal work.
+36
View File
@@ -0,0 +1,36 @@
% DOCKER(1) Docker User Manuals
% William Henry
% APRIL 2014
# NAME
docker-load - Load an image from a tar archive on STDIN
# SYNOPSIS
**docker load** **--input**=""
# DESCRIPTION
Loads a tarred repository from a file or the standard input stream.
Restores both images and tags.
# OPTIONS
**-i**, **--input**=""
Read from a tar archive file, instead of STDIN
# EXAMPLE
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
busybox latest 769b9341d937 7 weeks ago 2.489 MB
$ sudo docker load --input fedora.tar
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
busybox latest 769b9341d937 7 weeks ago 2.489 MB
fedora rawhide 0d20aec6529d 7 weeks ago 387 MB
fedora 20 58394af37342 7 weeks ago 385.5 MB
fedora heisenbug 58394af37342 7 weeks ago 385.5 MB
fedora latest 58394af37342 7 weeks ago 385.5 MB
# HISTORY
April 2014, Originally compiled by William Henry (whenry at redhat dot com)
based on docker.io source material and internal work.
+35
View File
@@ -0,0 +1,35 @@
% DOCKER(1) Docker User Manuals
% William Henry
% APRIL 2014
# NAME
docker-login - Register or Login to a docker registry server.
# SYNOPSIS
**docker login** [**-e**|**-email**=""] [**-p**|**--password**=""]
[**-u**|**--username**=""] [SERVER]
# DESCRIPTION
Register or Login to a docker registry server, if no server is
specified "https://index.docker.io/v1/" is the default. If you want to
login to a private registry you can specify this by adding the server name.
# OPTIONS
**-e**, **--email**=""
Email address
**-p**, **--password**=""
Password
**-u**, **--username**=""
Username
# EXAMPLE
## Login to a local registry
# docker login localhost:8080
# HISTORY
April 2014, Originally compiled by William Henry (whenry at redhat dot com)
based on docker.io source material and internal work.
+26
View File
@@ -0,0 +1,26 @@
% DOCKER(1) Docker User Manuals
% William Henry
% APRIL 2014
# NAME
docker-logs - Fetch the logs of a container
# SYNOPSIS
**docker logs** **--follow**[=*false*] CONTAINER
# DESCRIPTION
The **docker logs** command batch-retrieves whatever logs are present for
a container at the time of execution. This does not guarantee execution
order when combined with a docker run (i.e. your run may not have generated
any logs at the time you execute docker logs).
The **docker logs --follow** command combines commands **docker logs** and
**docker attach**. It will first return all logs from the beginning and
then continue streaming new output from the containers stdout and stderr.
# OPTIONS
**-f, --follow**=*true*|*false*
When *true*, follow log output. The default is false.
# HISTORY
April 2014, Originally compiled by William Henry (whenry at redhat dot com)
based on docker.io source material and internal work.
+15
View File
@@ -0,0 +1,15 @@
% DOCKER(1) Docker User Manuals
% William Henry
% APRIL 2014
# NAME
docker-port - Lookup the public-facing port which is NAT-ed to PRIVATE_PORT
# SYNOPSIS
**docker port** CONTAINER PRIVATE_PORT
# DESCRIPTION
Lookup the public-facing port which is NAT-ed to PRIVATE_PORT
# HISTORY
April 2014, Originally compiled by William Henry (whenry at redhat dot com)
based on docker.io source material and internal work.
+68
View File
@@ -0,0 +1,68 @@
% DOCKER(1) Docker User Manuals
% William Henry
% APRIL 2014
# NAME
docker-ps - List containers
# SYNOPSIS
**docker ps** [**-a**|**--all**=*false*] [**--before**=""]
[**-l**|**--latest**=*false*] [**-n**=*-1*] [**--no-trunc**=*false*]
[**-q**|**--quiet**=*false*] [**-s**|**--size**=*false*]
[**--since**=""]
# DESCRIPTION
List the containers in the local repository. By default this show only
the running containers.
# OPTIONS
**-a**, **--all**=*true*|*false*
When true show all containers. Only running containers are shown by
default. Default is false.
**--before**=""
Show only container created before Id or Name, include non-running
ones.
**-l**, **--latest**=*true*|*false*
When true show only the latest created container, include non-running
ones. The default is false.
**-n**=NUM
Show NUM (integer) last created containers, include non-running ones.
The default is -1 (none)
**--no-trunc**=*true*|*false*
When true truncate output. Default is false.
**-q**, **--quiet**=*true*|*false*
When false only display numeric IDs. Default is false.
**-s**, **--size**=*true*|*false*
When true display container sizes. Default is false.
**--since**=""
Show only containers created since Id or Name, include non-running ones.
# EXAMPLE
# Display all containers, including non-running
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a87ecb4f327c fedora:20 /bin/sh -c #(nop) MA 20 minutes ago Exit 0 desperate_brattain
01946d9d34d8 vpavlin/rhel7:latest /bin/sh -c #(nop) MA 33 minutes ago Exit 0 thirsty_bell
c1d3b0166030 acffc0358b9e /bin/sh -c yum -y up 2 weeks ago Exit 1 determined_torvalds
41d50ecd2f57 fedora:20 /bin/sh -c #(nop) MA 2 weeks ago Exit 0 drunk_pike
# Display only IDs of all containers, including non-running
# docker ps -a -q
a87ecb4f327c
01946d9d34d8
c1d3b0166030
41d50ecd2f57
# HISTORY
April 2014, Originally compiled by William Henry (whenry at redhat dot com)
based on docker.io source material and internal work.
+37
View File
@@ -0,0 +1,37 @@
% DOCKER(1) Docker User Manuals
% William Henry
% APRIL 2014
# NAME
docker-pull - Pull an image or a repository from the registry
# SYNOPSIS
**docker pull** NAME[:TAG]
# DESCRIPTION
This command pulls down an image or a repository from the registry. If
there is more than one image for a repository (e.g. fedora) then all
images for that repository name are pulled down including any tags.
# EXAMPLE
# Pull a reposiotry with multiple images
$ sudo docker pull fedora
Pulling repository fedora
ad57ef8d78d7: Download complete
105182bb5e8b: Download complete
511136ea3c5a: Download complete
73bd853d2ea5: Download complete
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
fedora rawhide ad57ef8d78d7 5 days ago 359.3 MB
fedora 20 105182bb5e8b 5 days ago 372.7 MB
fedora heisenbug 105182bb5e8b 5 days ago 372.7 MB
fedora latest 105182bb5e8b 5 days ago 372.7 MB
# HISTORY
April 2014, Originally compiled by William Henry (whenry at redhat dot com)
based on docker.io source material and internal work.
+44
View File
@@ -0,0 +1,44 @@
% DOCKER(1) Docker User Manuals
% William Henry
% APRIL 2014
# NAME
docker-push - Push an image or a repository to the registry
# SYNOPSIS
**docker push** NAME[:TAG]
# DESCRIPTION
Push an image or a repository to a registry. The default registry is the Docker
Index located at [index.docker.io](https://index.docker.io/v1/). However the
image can be pushed to another, perhaps private, registry as demonstrated in
the example below.
# EXAMPLE
# Pushing a new image to a registry
First save the new image by finding the container ID (using **docker ps**)
and then committing it to a new image name:
# docker commit c16378f943fe rhel-httpd
Now push the image to the registry using the image ID. In this example
the registry is on host named registry-host and listening on port 5000.
Default Docker commands will push to the default `index.docker.io`
registry. Instead, push to the local registry, which is on a host called
registry-host*. To do this, tag the image with the host name or IP
address, and the port of the registry:
# docker tag rhel-httpd registry-host:5000/myadmin/rhel-httpd
# docker push registry-host:5000/myadmin/rhel-httpd
Check that this worked by running:
# docker images
You should see both `rhel-httpd` and `registry-host:5000/myadmin/rhel-httpd`
listed.
# HISTORY
April 2014, Originally compiled by William Henry (whenry at redhat dot com)
based on docker.io source material and internal work.
+21
View File
@@ -0,0 +1,21 @@
% DOCKER(1) Docker User Manuals
% William Henry
% APRIL 2014
# NAME
docker-restart - Restart a running container
# SYNOPSIS
**docker restart** [**-t**|**--time**[=*10*]] CONTAINER [CONTAINER...]
# DESCRIPTION
Restart each container listed.
# OPTIONS
**-t**, **--time**=NUM
Number of seconds to try to stop for before killing the container. Once
killed it will then be restarted. Default=10
# HISTORY
April 2014, Originally compiled by William Henry (whenry at redhat dot com)
based on docker.io source material and internal work.
+56
View File
@@ -0,0 +1,56 @@
% DOCKER(1) Docker User Manuals
% William Henry
% APRIL 2014
# NAME
docker-rm - Remove one or more containers.
# SYNOPSIS
**docker rm** [**-f**|**--force**[=*false*] [**-l**|**--link**[=*false*] [**-v**|
**--volumes**[=*false*]
CONTAINER [CONTAINER...]
# DESCRIPTION
**docker rm** will remove one or more containers from the host node. The
container name or ID can be used. This does not remove images. You cannot
remove a running container unless you use the \fB-f\fR option. To see all
containers on a host use the **docker ps -a** command.
# OPTIONS
**-f**, **--force**=*true*|*false*
When set to true, force the removal of the container. The default is
*false*.
**-l**, **--link**=*true*|*false*
When set to true, remove the specified link and not the underlying
container. The default is *false*.
**-v**, **--volumes**=*true*|*false*
When set to true, remove the volumes associated to the container. The
default is *false*.
# EXAMPLES
##Removing a container using its ID##
To remove a container using its ID, find either from a **docker ps -a**
command, or use the ID returned from the **docker run** command, or retrieve
it from a file used to store it using the **docker run --cidfile**:
docker rm abebf7571666
##Removing a container using the container name##
The name of the container can be found using the **docker ps -a**
command. The use that name as follows:
docker rm hopeful_morse
# HISTORY
April 2014, Originally compiled by William Henry (whenry at redhat dot com)
based on docker.io source material and internal work.
+35
View File
@@ -0,0 +1,35 @@
% DOCKER(1) Docker User Manuals
% William Henry
% APRIL 2014
# NAME
docker-rmi \- Remove one or more images.
# SYNOPSIS
**docker rmi** [**-f**|**--force**[=*false*] IMAGE [IMAGE...]
# DESCRIPTION
This will remove one or more images from the host node. This does not
remove images from a registry. You cannot remove an image of a running
container unless you use the **-f** option. To see all images on a host
use the **docker images** command.
# OPTIONS
**-f**, **--force**=*true*|*false*
When set to true, force the removal of the image. The default is
*false*.
# EXAMPLES
## Removing an image
Here is an example of removing and image:
docker rmi fedora/httpd
# HISTORY
April 2014, Originally compiled by William Henry (whenry at redhat dot com)
based on docker.io source material and internal work.
+343
View File
@@ -0,0 +1,343 @@
% DOCKER(1) Docker User Manuals
% William Henry
% APRIL 2014
# NAME
docker-run - Run a process in an isolated container
# SYNOPSIS
**docker run**
[**-a**|**--attach**[=]] [**-c**|**--cpu-shares**[=0]
[**-m**|**--memory**=*memory-limit*]
[**--cidfile**=*file*] [**-d**|**--detach**[=*false*]] [**--dns**=*IP-address*]
[**--name**=*name*] [**-u**|**--user**=*username*|*uid*]
[**--link**=*name*:*alias*]
[**-e**|**--env**=*environment*] [**--entrypoint**=*command*]
[**--expose**=*port*] [**-P**|**--publish-all**[=*false*]]
[**-p**|**--publish**=*port-mappping*] [**-h**|**--hostname**=*hostname*]
[**--rm**[=*false*]] [**--priviledged**[=*false*]
[**-i**|**--interactive**[=*false*]
[**-t**|**--tty**[=*false*]] [**--lxc-conf**=*options*]
[**-n**|**--networking**[=*true*]]
[**-v**|**--volume**=*volume*] [**--volumes-from**=*container-id*]
[**-w**|**--workdir**=*directory*] [**--sig-proxy**[=*true*]]
IMAGE [COMMAND] [ARG...]
# DESCRIPTION
Run a process in a new container. **docker run** starts a process with its own
file system, its own networking, and its own isolated process tree. The IMAGE
which starts the process may define defaults related to the process that will be
run in the container, the networking to expose, and more, but **docker run**
gives final control to the operator or administrator who starts the container
from the image. For that reason **docker run** has more options than any other
Docker command.
If the IMAGE is not already loaded then **docker run** will pull the IMAGE, and
all image dependencies, from the repository in the same way running **docker
pull** IMAGE, before it starts the container from that image.
# OPTIONS
**-a**, **--attach**=*stdin*|*stdout*|*stderr*
Attach to stdin, stdout or stderr. In foreground mode (the default when
**-d** is not specified), **docker run** can start the process in the container
and attach the console to the processs standard input, output, and standard
error. It can even pretend to be a TTY (this is what most commandline
executables expect) and pass along signals. The **-a** option can be set for
each of stdin, stdout, and stderr.
**-c**, **--cpu-shares**=0
CPU shares in relative weight. You can increase the priority of a container
with the -c option. By default, all containers run at the same priority and get
the same proportion of CPU cycles, but you can tell the kernel to give more
shares of CPU time to one or more containers when you start them via **docker
run**.
**--cidfile**=*file*
Write the container ID to the file specified.
**-d**, **-detach**=*true*|*false*
Detached mode. This runs the container in the background. It outputs the new
container's ID and any error messages. At any time you can run **docker ps** in
the other shell to view a list of the running containers. You can reattach to a
detached container with **docker attach**. If you choose to run a container in
the detached mode, then you cannot use the **-rm** option.
**--dns**=*IP-address*
Set custom DNS servers. This option can be used to override the DNS
configuration passed to the container. Typically this is necessary when the
host DNS configuration is invalid for the container (eg. 127.0.0.1). When this
is the case the **-dns** flags is necessary for every run.
**-e**, **-env**=*environment*
Set environment variables. This option allows you to specify arbitrary
environment variables that are available for the process that will be launched
inside of the container.
**--entrypoint**=*command*
This option allows you to overwrite the default entrypoint of the image that
is set in the Dockerfile. The ENTRYPOINT of an image is similar to a COMMAND
because it specifies what executable to run when the container starts, but it is
(purposely) more difficult to override. The ENTRYPOINT gives a container its
default nature or behavior, so that when you set an ENTRYPOINT you can run the
container as if it were that binary, complete with default options, and you can
pass in more options via the COMMAND. But, sometimes an operator may want to run
something else inside the container, so you can override the default ENTRYPOINT
at runtime by using a **--entrypoint** and a string to specify the new
ENTRYPOINT.
**--expose**=*port*
Expose a port from the container without publishing it to your host. A
containers port can be exposed to other containers in three ways: 1) The
developer can expose the port using the EXPOSE parameter of the Dockerfile, 2)
the operator can use the **--expose** option with **docker run**, or 3) the
container can be started with the **--link**.
**-m**, **-memory**=*memory-limit*
Allows you to constrain the memory available to a container. If the host
supports swap memory, then the -m memory setting can be larger than physical
RAM. The memory limit format: <number><optional unit>, where unit = b, k, m or
g.
**-P**, **-publish-all**=*true*|*false*
When set to true publish all exposed ports to the host interfaces. The
default is false. If the operator uses -P (or -p) then Docker will make the
exposed port accessible on the host and the ports will be available to any
client that can reach the host. To find the map between the host ports and the
exposed ports, use **docker port**.
**-p**, **-publish**=[]
Publish a container's port to the host (format: ip:hostPort:containerPort |
ip::containerPort | hostPort:containerPort) (use **docker port** to see the
actual mapping)
**-h**, **-hostname**=*hostname*
Sets the container host name that is available inside the container.
**-i**, **-interactive**=*true*|*false*
When set to true, keep stdin open even if not attached. The default is false.
**--link**=*name*:*alias*
Add link to another container. The format is name:alias. If the operator
uses **--link** when starting the new client container, then the client
container can access the exposed port via a private networking interface. Docker
will set some environment variables in the client container to help indicate
which interface and port to use.
**-n**, **-networking**=*true*|*false*
By default, all containers have networking enabled (true) and can make
outgoing connections. The operator can disable networking with **--networking**
to false. This disables all incoming and outgoing networking. In cases like this
, I/O can only be performed through files or by using STDIN/STDOUT.
Also by default, the container will use the same DNS servers as the host. The
operator may override this with **-dns**.
**--name**=*name*
Assign a name to the container. The operator can identify a container in
three ways:
UUID long identifier (“f78375b1c487e03c9438c729345e54db9d20cfa2ac1fc3494b6eb60872e74778”)
UUID short identifier (“f78375b1c487”)
Name (“jonah”)
The UUID identifiers come from the Docker daemon, and if a name is not assigned
to the container with **--name** then the daemon will also generate a random
string name. The name is useful when defining links (see **--link**) (or any
other place you need to identify a container). This works for both background
and foreground Docker containers.
**--privileged**=*true*|*false*
Give extended privileges to this container. By default, Docker containers are
“unprivileged” (=false) and cannot, for example, run a Docker daemon inside the
Docker container. This is because by default a container is not allowed to
access any devices. A “privileged” container is given access to all devices.
When the operator executes **docker run -privileged**, Docker will enable access
to all devices on the host as well as set some configuration in AppArmor to
allow the container nearly all the same access to the host as processes running
outside of a container on the host.
**--rm**=*true*|*false*
If set to *true* the container is automatically removed when it exits. The
default is *false*. This option is incompatible with **-d**.
**--sig-proxy**=*true*|*false*
When set to true, proxify all received signals to the process (even in
non-tty mode). The default is true.
**-t**, **-tty**=*true*|*false*
When set to true Docker can allocate a pseudo-tty and attach to the standard
input of any container. This can be used, for example, to run a throwaway
interactive shell. The default is value is false.
**-u**, **-user**=*username*,*uid*
Set a username or UID for the container.
**-v**, **-volume**=*volume*
Bind mount a volume to the container. The **-v** option can be used one or
more times to add one or more mounts to a container. These mounts can then be
used in other containers using the **--volumes-from** option. See examples.
**--volumes-from**=*container-id*
Will mount volumes from the specified container identified by container-id.
Once a volume is mounted in a one container it can be shared with other
containers using the **--volumes-from** option when running those other
containers. The volumes can be shared even if the original container with the
mount is not running.
**-w**, **-workdir**=*directory*
Working directory inside the container. The default working directory for
running binaries within a container is the root directory (/). The developer can
set a different default with the Dockerfile WORKDIR instruction. The operator
can override the working directory by using the **-w** option.
**IMAGE**
The image name or ID.
**COMMAND**
The command or program to run inside the image.
**ARG**
The arguments for the command to be run in the container.
# EXAMPLES
## Exposing log messages from the container to the host's log
If you want messages that are logged in your container to show up in the host's
syslog/journal then you should bind mount the /var/log directory as follows.
# docker run -v /dev/log:/dev/log -i -t fedora /bin/bash
From inside the container you can test this by sending a message to the log.
(bash)# logger "Hello from my container"
Then exit and check the journal.
# exit
# journalctl -b | grep Hello
This should list the message sent to logger.
## Attaching to one or more from STDIN, STDOUT, STDERR
If you do not specify -a then Docker will attach everything (stdin,stdout,stderr)
. You can specify to which of the three standard streams (stdin, stdout, stderr)
youd like to connect instead, as in:
# docker run -a stdin -a stdout -i -t fedora /bin/bash
## Linking Containers
The link feature allows multiple containers to communicate with each other. For
example, a container whose Dockerfile has exposed port 80 can be run and named
as follows:
# docker run --name=link-test -d -i -t fedora/httpd
A second container, in this case called linker, can communicate with the httpd
container, named link-test, by running with the **--link=<name>:<alias>**
# docker run -t -i --link=link-test:lt --name=linker fedora /bin/bash
Now the container linker is linked to container link-test with the alias lt.
Running the **env** command in the linker container shows environment variables
with the LT (alias) context (**LT_**)
# env
HOSTNAME=668231cb0978
TERM=xterm
LT_PORT_80_TCP=tcp://172.17.0.3:80
LT_PORT_80_TCP_PORT=80
LT_PORT_80_TCP_PROTO=tcp
LT_PORT=tcp://172.17.0.3:80
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/
LT_NAME=/linker/lt
SHLVL=1
HOME=/
LT_PORT_80_TCP_ADDR=172.17.0.3
_=/usr/bin/env
When linking two containers Docker will use the exposed ports of the container
to create a secure tunnel for the parent to access.
## Mapping Ports for External Usage
The exposed port of an application can be mapped to a host port using the **-p**
flag. For example a httpd port 80 can be mapped to the host port 8080 using the
following:
# docker run -p 8080:80 -d -i -t fedora/httpd
## Creating and Mounting a Data Volume Container
Many applications require the sharing of persistent data across several
containers. Docker allows you to create a Data Volume Container that other
containers can mount from. For example, create a named container that contains
directories /var/volume1 and /tmp/volume2. The image will need to contain these
directories so a couple of RUN mkdir instructions might be required for you
fedora-data image:
# docker run --name=data -v /var/volume1 -v /tmp/volume2 -i -t fedora-data true
# docker run --volumes-from=data --name=fedora-container1 -i -t fedora bash
Multiple -volumes-from parameters will bring together multiple data volumes from
multiple containers. And it's possible to mount the volumes that came from the
DATA container in yet another container via the fedora-container1 intermidiery
container, allowing to abstract the actual data source from users of that data:
# docker run --volumes-from=fedora-container1 --name=fedora-container2 -i -t fedora bash
## Mounting External Volumes
To mount a host directory as a container volume, specify the absolute path to
the directory and the absolute path for the container directory separated by a
colon:
# docker run -v /var/db:/data1 -i -t fedora bash
When using SELinux, be aware that the host has no knowledge of container SELinux
policy. Therefore, in the above example, if SELinux policy is enforced, the
`/var/db` directory is not writable to the container. A "Permission Denied"
message will occur and an avc: message in the host's syslog.
To work around this, at time of writing this man page, the following command
needs to be run in order for the proper SELinux policy type label to be attached
to the host directory:
# chcon -Rt svirt_sandbox_file_t /var/db
Now, writing to the /data1 volume in the container will be allowed and the
changes will also be reflected on the host in /var/db.
# HISTORY
April 2014, Originally compiled by William Henry (whenry at redhat dot com)
based on docker.io source material and internal work.
+35
View File
@@ -0,0 +1,35 @@
% DOCKER(1) Docker User Manuals
% William Henry
% APRIL 2014
# NAME
docker-save - Save an image to a tar archive (streamed to STDOUT by default)
# SYNOPSIS
**docker save** [**-o**|**--output**=""] IMAGE
# DESCRIPTION
Produces a tarred repository to the standard output stream. Contains all
parent layers, and all tags + versions, or specified repo:tag.
Stream to a file instead of STDOUT by using **-o**.
# OPTIONS
**-o**, **--output**=""
Write to an file, instead of STDOUT
# EXAMPLE
Save all fedora repository images to a fedora-all.tar and save the latest
fedora image to a fedora-latest.tar:
$ sudo docker save fedora > fedora-all.tar
$ sudo docker save --output=fedora-latest.tar fedora:latest
$ ls -sh fedora-all.tar
721M fedora-all.tar
$ ls -sh fedora-latest.tar
367M fedora-latest.tar
# HISTORY
April 2014, Originally compiled by William Henry (whenry at redhat dot com)
based on docker.io source material and internal work.
+55
View File
@@ -0,0 +1,55 @@
% DOCKER(1) Docker User Manuals
% William Henry
% APRIL 2014
# NAME
docker-search - Search the docker index for images
# SYNOPSIS
**docker search** **--no-trunc**[=*false*] **-t**|**--trusted**[=*false*]
**-s**|**--stars**[=*0*] TERM
# DESCRIPTION
Search an index for an image with that matches the term TERM. The table
of images returned displays the name, description (truncated by default),
number of stars awarded, whether the image is official, and whether it
is trusted.
# OPTIONS
**--no-trunc**=*true*|*false*
When true display the complete description. The default is false.
**-s**, **--stars**=NUM
Only displays with at least NUM (integer) stars. I.e. only those images
ranked >=NUM.
**-t**, **--trusted**=*true*|*false*
When true only show trusted builds. The default is false.
# EXAMPLE
## Search the registry for ranked images
Search the registry for the term 'fedora' and only display those images
ranked 3 or higher:
$ sudo docker search -s 3 fedora
NAME DESCRIPTION STARS OFFICIAL TRUSTED
mattdm/fedora A basic Fedora image corresponding roughly... 50
fedora (Semi) Official Fedora base image. 38
mattdm/fedora-small A small Fedora image on which to build. Co... 8
goldmann/wildfly A WildFly application server running on a ... 3 [OK]
## Search the registry for trusted images
Search the registry for the term 'fedora' and only display trusted images
ranked 1 or higher:
$ sudo docker search -s 1 -t fedora
NAME DESCRIPTION STARS OFFICIAL TRUSTED
goldmann/wildfly A WildFly application server running on a ... 3 [OK]
tutum/fedora-20 Fedora 20 image with SSH access. For the r... 1 [OK]
# HISTORY
April 2014, Originally compiled by William Henry (whenry at redhat dot com)
based on docker.io source material and internal work.
+25
View File
@@ -0,0 +1,25 @@
% DOCKER(1) Docker User Manuals
% William Henry
% APRIL 2014
# NAME
docker-start - Restart a stopped container
# SYNOPSIS
**docker start** [**a**|**--attach**[=*false*]] [**-i**|**--interactive**
[=*true*] CONTAINER [CONTAINER...]
# DESCRIPTION
Start a stopped container.
# OPTION
**-a**, **--attach**=*true*|*false*
When true attach to container's stdout/stderr and forward all signals to
the process
**-i**, **--interactive**=*true*|*false*
When true attach to container's stdin
# HISTORY
April 2014, Originally compiled by William Henry (whenry at redhat dot com)
based on docker.io source material and internal work.
+22
View File
@@ -0,0 +1,22 @@
% DOCKER(1) Docker User Manuals
% William Henry
% APRIL 2014
# NAME
docker-stop - Stop a running container
grace period)
# SYNOPSIS
**docker stop** [**-t**|**--time**[=*10*]] CONTAINER [CONTAINER...]
# DESCRIPTION
Stop a running container (Send SIGTERM, and then SIGKILL after
grace period)
# OPTIONS
**-t**, **--time**=NUM
Wait NUM number of seconds for the container to stop before killing it.
The default is 10 seconds.
# HISTORY
April 2014, Originally compiled by William Henry (whenry at redhat dot com)
based on docker.io source material and internal work.
+48
View File
@@ -0,0 +1,48 @@
% DOCKER(1) Docker User Manuals
% William Henry
% APRIL 2014
# NAME
docker-tag - Tag an image in the repository
# SYNOPSIS
**docker tag** [**-f**|**--force**[=*false*]
IMAGE [REGISTRYHOST/][USERNAME/]NAME[:TAG]
# DESCRIPTION
This will tag an image in the repository.
# "OPTIONS"
**-f**, **--force**=*true*|*false*
When set to true, force the tag name. The default is *false*.
**REGISTRYHOST**
The hostname of the registry if required. This may also include the port
separated by a ':'
**USERNAME**
The username or other qualifying identifier for the image.
**NAME**
The image name.
**TAG**
The tag you are assigning to the image.
# EXAMPLES
## Tagging an image
Here is an example of tagging an image with the tag version1.0 :
docker tag 0e5574283393 fedora/httpd:version1.0
## Tagging an image for a private repository
To push an image to an private registry and not the central Docker
registry you must tag it with the registry hostname and port (if needed).
docker tag 0e5574283393 myregistryhost:5000/fedora/httpd:version1.0
# HISTORY
April 2014, Originally compiled by William Henry (whenry at redhat dot com)
based on docker.io source material and internal work.
+27
View File
@@ -0,0 +1,27 @@
% DOCKER(1) Docker User Manuals
% William Henry
% APRIL 2014
# NAME
docker-top - Lookup the running processes of a container
# SYNOPSIS
**docker top** CONTAINER [ps-OPTION]
# DESCRIPTION
Look up the running process of the container. ps-OPTION can be any of the
options you would pass to a Linux ps command.
# EXAMPLE
Run **docker top** with the ps option of -x:
$ sudo docker top 8601afda2b -x
PID TTY STAT TIME COMMAND
16623 ? Ss 0:00 sleep 99999
# HISTORY
April 2014, Originally compiled by William Henry (whenry at redhat dot com)
based on docker.io source material and internal work.
+23
View File
@@ -0,0 +1,23 @@
% DOCKER(1) Docker User Manuals
% William Henry
% APRIL 2014
# NAME
docker-wait - Block until a container stops, then print its exit code.
# SYNOPSIS
**docker wait** CONTAINER [CONTAINER...]
# DESCRIPTION
Block until a container stops, then print its exit code.
#EXAMPLE
$ sudo docker run -d fedora sleep 99
079b83f558a2bc52ecad6b2a5de13622d584e6bb1aea058c11b36511e85e7622
$ sudo docker wait 079b83f558a2bc
0
# HISTORY
April 2014, Originally compiled by William Henry (whenry at redhat dot com)
based on docker.io source material and internal work.
+187
View File
@@ -0,0 +1,187 @@
% DOCKER(1) Docker User Manuals
% William Henry
% APRIL 2014
# NAME
docker \- Docker image and container command line interface
# SYNOPSIS
**docker** [OPTIONS] COMMAND [arg...]
# DESCRIPTION
**docker** has two distinct functions. It is used for starting the Docker
daemon and to run the CLI (i.e., to command the daemon to manage images,
containers etc.) So **docker** is both a server, as a deamon, and a client
to the daemon, through the CLI.
To run the Docker deamon you do not specify any of the commands listed below but
must specify the **-d** option. The other options listed below are for the
daemon only.
The Docker CLI has over 30 commands. The commands are listed below and each has
its own man page which explain usage and arguements.
To see the man page for a command run **man docker <command>**.
# OPTIONS
**-D**=*true*|*false*
Enable debug mode. Default is false.
**-H**, **--host**=[unix:///var/run/docker.sock]: tcp://[host[:port]] to bind or
unix://[/path/to/socket] to use.
Enable both the socket support and TCP on localhost. When host=[0.0.0.0],
port=[4243] or path =[/var/run/docker.sock] is omitted, default values are used.
**--api-enable-cors**=*true*|*false*
Enable CORS headers in the remote API. Default is false.
**-b**=""
Attach containers to a pre\-existing network bridge; use 'none' to disable container networking
**--bip**=""
Use the provided CIDR notation address for the dynamically created bridge (docker0); Mutually exclusive of \-b
**-d**=*true*|*false*
Enable daemon mode. Default is false.
**--dns**=""
Force Docker to use specific DNS servers
**-g**=""
Path to use as the root of the Docker runtime. Default is `/var/lib/docker`.
**--icc**=*true*|*false*
Enable inter\-container communication. Default is true.
**--ip**=""
Default IP address to use when binding container ports. Default is `0.0.0.0`.
**--iptables**=*true*|*false*
Disable Docker's addition of iptables rules. Default is true.
**--mtu**=VALUE
Set the containers network mtu. Default is `1500`.
**-p**=""
Path to use for daemon PID file. Default is `/var/run/docker.pid`
**-r**=*true*|*false*
Restart previously running containers. Default is true.
**-s**=""
Force the Docker runtime to use a specific storage driver.
**-v**=*true*|*false*
Print version information and quit. Default is false.
**--selinux-enabled=*true*|*false*
Enable selinux support. Default is false.
# COMMANDS
**docker-attach(1)**
Attach to a running container
**docker-build(1)**
Build a container from a Dockerfile
**docker-commit(1)**
Create a new image from a container's changes
**docker-cp(1)**
Copy files/folders from the containers filesystem to the host at path
**docker-diff(1)**
Inspect changes on a container's filesystem
**docker-events(1)**
Get real time events from the server
**docker-export(1)**
Stream the contents of a container as a tar archive
**docker-history(1)**
Show the history of an image
**docker-images(1)**
List images
**docker-import(1)**
Create a new filesystem image from the contents of a tarball
**docker-info(1)**
Display system-wide information
**docker-inspect(1)**
Return low-level information on a container
**docker-kill(1)**
Kill a running container (which includes the wrapper process and everything
inside it)
**docker-load(1)**
Load an image from a tar archive
**docker-login(1)**
Register or Login to a Docker registry server
**docker-logs(1)**
Fetch the logs of a container
**docker-port(1)**
Lookup the public-facing port which is NAT-ed to PRIVATE_PORT
**docker-ps(1)**
List containers
**docker-pull(1)**
Pull an image or a repository from a Docker registry server
**docker-push(1)**
Push an image or a repository to a Docker registry server
**docker-restart(1)**
Restart a running container
**docker-rm(1)**
Remove one or more containers
**docker-rmi(1)**
Remove one or more images
**docker-run(1)**
Run a command in a new container
**docker-save(1)**
Save an image to a tar archive
**docker-search(1)**
Search for an image in the Docker index
**docker-start(1)**
Start a stopped container
**docker-stop(1)**
Stop a running container
**docker-tag(1)**
Tag an image into a repository
**docker-top(1)**
Lookup the running processes of a container
**version**
Show the Docker version information
**docker-wait(1)**
Block until a container stops, then print its exit code
# EXAMPLES
For specific examples please see the man page for the specific Docker command.
For example:
man docker run
# HISTORY
April 2014, Originally compiled by William Henry (whenry at redhat dot com) based
on docker.io source material and internal work.
+22
View File
@@ -0,0 +1,22 @@
#!/bin/bash
set -e
# get into this script's directory
cd "$(dirname "$(readlink -f "$BASH_SOURCE")")"
[ "$1" = '-q' ] || {
set -x
pwd
}
for FILE in *.md; do
base="$(basename "$FILE")"
name="${base%.md}"
num="${name##*.}"
if [ -z "$num" -o "$base" = "$num" ]; then
# skip files that aren't of the format xxxx.N.md (like README.md)
continue
fi
mkdir -p "../man${num}"
pandoc -s -t man "$FILE" -o "../man${num}/${name}"
done
+50
View File
@@ -0,0 +1,50 @@
DOCKER "1" "APRIL 2014" "0.1" "Docker"
=======================================
NAME
----
docker-rm - Remove one or more containers.
SYNOPSIS
--------
`docker rm` [`-f`|`--force`[=*false*] [`-l`|`--link`[=*false*] [`-v`|`--volumes`[=*false*]
CONTAINER [CONTAINER...]
DESCRIPTION
-----------
`docker rm` will remove one or more containers from the host node. The container name or ID can be used. This does not remove images. You cannot remove a running container unless you use the \fB-f\fR option. To see all containers on a host use the `docker ps -a` command.
OPTIONS
-------
`-f`, `--force`=*true*|*false*:
When set to true, force the removal of the container. The default is *false*.
`-l`, `--link`=*true*|*false*:
When set to true, remove the specified link and not the underlying container. The default is *false*.
`-v`, `--volumes`=*true*|*false*:
When set to true, remove the volumes associated to the container. The default is *false*.
EXAMPLES
--------
##Removing a container using its ID##
To remove a container using its ID, find either from a `docker ps -a` command, or use the ID returned from the `docker run` command, or retrieve it from a file used to store it using the `docker run --cidfile`:
docker rm abebf7571666
##Removing a container using the container name##
The name of the container can be found using the \fBdocker ps -a\fR command. The use that name as follows:
docker rm hopeful_morse
HISTORY
-------
April 2014, Originally compiled by William Henry (whenry at redhat dot com) based on dockier.io source material and internal work.
+82
View File
@@ -0,0 +1,82 @@
#!/bin/sh
set -e
[ $(id -u) -eq 0 ] || {
printf >&2 '%s requires root\n' "$0"
exit 1
}
usage() {
printf >&2 '%s: [-r release] [-m mirror] [-s]\n' "$0"
exit 1
}
tmp() {
TMP=$(mktemp -d /tmp/alpine-docker-XXXXXXXXXX)
ROOTFS=$(mktemp -d /tmp/alpine-docker-rootfs-XXXXXXXXXX)
trap "rm -rf $TMP $ROOTFS" EXIT TERM INT
}
apkv() {
curl -s $REPO/$ARCH/APKINDEX.tar.gz | tar -Oxz |
grep '^P:apk-tools-static$' -A1 | tail -n1 | cut -d: -f2
}
getapk() {
curl -s $REPO/$ARCH/apk-tools-static-$(apkv).apk |
tar -xz -C $TMP sbin/apk.static
}
mkbase() {
$TMP/sbin/apk.static --repository $REPO --update-cache --allow-untrusted \
--root $ROOTFS --initdb add alpine-base
}
conf() {
printf '%s\n' $REPO > $ROOTFS/etc/apk/repositories
}
pack() {
local id
id=$(tar --numeric-owner -C $ROOTFS -c . | docker import - alpine:$REL)
docker tag $id alpine:latest
docker run -i -t alpine printf 'alpine:%s with id=%s created!\n' $REL $id
}
save() {
[ $SAVE -eq 1 ] || return
tar --numeric-owner -C $ROOTFS -c . | xz > rootfs.tar.xz
}
while getopts "hr:m:s" opt; do
case $opt in
r)
REL=$OPTARG
;;
m)
MIRROR=$OPTARG
;;
s)
SAVE=1
;;
*)
usage
;;
esac
done
REL=${REL:-edge}
MIRROR=${MIRROR:-http://nl.alpinelinux.org/alpine}
SAVE=${SAVE:-0}
REPO=$MIRROR/$REL/main
ARCH=$(uname -m)
tmp
getapk
mkbase
conf
pack
save
+1
View File
@@ -57,6 +57,7 @@ mknod -m 666 $DEV/tty0 c 4 0
mknod -m 666 $DEV/full c 1 7
mknod -m 600 $DEV/initctl p
mknod -m 666 $DEV/ptmx c 5 2
ln -sf /proc/self/fd $DEV/fd
tar --numeric-owner -C $ROOTFS -c . | docker import - archlinux
docker run -i -t archlinux echo Success.
+1 -1
View File
@@ -43,7 +43,7 @@ usage() {
debianStable=wheezy
debianUnstable=sid
# this should match the name found at http://releases.ubuntu.com/
ubuntuLatestLTS=precise
ubuntuLatestLTS=trusty
# this should match the name found at http://releases.tanglu.org/
tangluLatest=aequorea
-1
View File
@@ -1 +0,0 @@
Gurjeet Singh <gurjeet@singh.im> (gurjeet.singh.im)
-23
View File
@@ -1,23 +0,0 @@
# ZFS Storage Driver
This is a placeholder to declare the presence and status of ZFS storage driver
for containers.
The current development is done in Gurjeet Singh's fork of Docker, under the
branch named [zfs_driver].
[zfs_driver]: https://github.com/gurjeet/docker/tree/zfs_driver
# Status
Alpha: The code is now capable of creating, running and destroying containers
and images.
The code is under development. Contributions in the form of suggestions,
code-reviews, and patches are welcome.
Please send the communication to gurjeet@singh.im and CC at least one Docker
mailing list.
+153
View File
@@ -0,0 +1,153 @@
package daemon
import (
"io"
"github.com/dotcloud/docker/utils"
)
func (daemon *Daemon) Attach(container *Container, stdin io.ReadCloser, stdinCloser io.Closer, stdout io.Writer, stderr io.Writer) chan error {
var (
cStdout, cStderr io.ReadCloser
nJobs int
errors = make(chan error, 3)
)
if stdin != nil && container.Config.OpenStdin {
nJobs += 1
if cStdin, err := container.StdinPipe(); err != nil {
errors <- err
} else {
go func() {
utils.Debugf("attach: stdin: begin")
defer utils.Debugf("attach: stdin: end")
// No matter what, when stdin is closed (io.Copy unblock), close stdout and stderr
if container.Config.StdinOnce && !container.Config.Tty {
defer cStdin.Close()
} else {
defer func() {
if cStdout != nil {
cStdout.Close()
}
if cStderr != nil {
cStderr.Close()
}
}()
}
if container.Config.Tty {
_, err = utils.CopyEscapable(cStdin, stdin)
} else {
_, err = io.Copy(cStdin, stdin)
}
if err == io.ErrClosedPipe {
err = nil
}
if err != nil {
utils.Errorf("attach: stdin: %s", err)
}
errors <- err
}()
}
}
if stdout != nil {
nJobs += 1
if p, err := container.StdoutPipe(); err != nil {
errors <- err
} else {
cStdout = p
go func() {
utils.Debugf("attach: stdout: begin")
defer utils.Debugf("attach: stdout: end")
// If we are in StdinOnce mode, then close stdin
if container.Config.StdinOnce && stdin != nil {
defer stdin.Close()
}
if stdinCloser != nil {
defer stdinCloser.Close()
}
_, err := io.Copy(stdout, cStdout)
if err == io.ErrClosedPipe {
err = nil
}
if err != nil {
utils.Errorf("attach: stdout: %s", err)
}
errors <- err
}()
}
} else {
go func() {
if stdinCloser != nil {
defer stdinCloser.Close()
}
if cStdout, err := container.StdoutPipe(); err != nil {
utils.Errorf("attach: stdout pipe: %s", err)
} else {
io.Copy(&utils.NopWriter{}, cStdout)
}
}()
}
if stderr != nil {
nJobs += 1
if p, err := container.StderrPipe(); err != nil {
errors <- err
} else {
cStderr = p
go func() {
utils.Debugf("attach: stderr: begin")
defer utils.Debugf("attach: stderr: end")
// If we are in StdinOnce mode, then close stdin
if container.Config.StdinOnce && stdin != nil {
defer stdin.Close()
}
if stdinCloser != nil {
defer stdinCloser.Close()
}
_, err := io.Copy(stderr, cStderr)
if err == io.ErrClosedPipe {
err = nil
}
if err != nil {
utils.Errorf("attach: stderr: %s", err)
}
errors <- err
}()
}
} else {
go func() {
if stdinCloser != nil {
defer stdinCloser.Close()
}
if cStderr, err := container.StderrPipe(); err != nil {
utils.Errorf("attach: stdout pipe: %s", err)
} else {
io.Copy(&utils.NopWriter{}, cStderr)
}
}()
}
return utils.Go(func() error {
defer func() {
if cStdout != nil {
cStdout.Close()
}
if cStderr != nil {
cStderr.Close()
}
}()
// FIXME: how to clean up the stdin goroutine without the unwanted side effect
// of closing the passed stdin? Add an intermediary io.Pipe?
for i := 0; i < nJobs; i += 1 {
utils.Debugf("attach: waiting for job %d/%d", i+1, nJobs)
if err := <-errors; err != nil {
utils.Errorf("attach: job %d returned error %s, aborting all jobs", i+1, err)
return err
}
utils.Debugf("attach: job %d completed successfully", i+1)
}
utils.Debugf("attach: all jobs completed successfully")
return nil
})
}
File diff suppressed because it is too large Load Diff
@@ -1,4 +1,4 @@
package runtime
package daemon
import (
"github.com/dotcloud/docker/nat"
+218 -217
View File
@@ -1,27 +1,8 @@
package runtime
package daemon
import (
"container/list"
"fmt"
"github.com/dotcloud/docker/archive"
"github.com/dotcloud/docker/daemonconfig"
"github.com/dotcloud/docker/dockerversion"
"github.com/dotcloud/docker/engine"
"github.com/dotcloud/docker/graph"
"github.com/dotcloud/docker/image"
"github.com/dotcloud/docker/pkg/graphdb"
"github.com/dotcloud/docker/pkg/mount"
"github.com/dotcloud/docker/pkg/selinux"
"github.com/dotcloud/docker/pkg/sysinfo"
"github.com/dotcloud/docker/runconfig"
"github.com/dotcloud/docker/runtime/execdriver"
"github.com/dotcloud/docker/runtime/execdriver/execdrivers"
"github.com/dotcloud/docker/runtime/execdriver/lxc"
"github.com/dotcloud/docker/runtime/graphdriver"
_ "github.com/dotcloud/docker/runtime/graphdriver/vfs"
_ "github.com/dotcloud/docker/runtime/networkdriver/bridge"
"github.com/dotcloud/docker/runtime/networkdriver/portallocator"
"github.com/dotcloud/docker/utils"
"io"
"io/ioutil"
"log"
@@ -31,6 +12,28 @@ import (
"strings"
"sync"
"time"
"github.com/dotcloud/docker/archive"
"github.com/dotcloud/docker/daemon/execdriver"
"github.com/dotcloud/docker/daemon/execdriver/execdrivers"
"github.com/dotcloud/docker/daemon/execdriver/lxc"
"github.com/dotcloud/docker/daemon/graphdriver"
_ "github.com/dotcloud/docker/daemon/graphdriver/vfs"
_ "github.com/dotcloud/docker/daemon/networkdriver/bridge"
"github.com/dotcloud/docker/daemon/networkdriver/portallocator"
"github.com/dotcloud/docker/daemonconfig"
"github.com/dotcloud/docker/dockerversion"
"github.com/dotcloud/docker/engine"
"github.com/dotcloud/docker/graph"
"github.com/dotcloud/docker/image"
"github.com/dotcloud/docker/pkg/graphdb"
"github.com/dotcloud/docker/pkg/label"
"github.com/dotcloud/docker/pkg/mount"
"github.com/dotcloud/docker/pkg/networkfs/resolvconf"
"github.com/dotcloud/docker/pkg/selinux"
"github.com/dotcloud/docker/pkg/sysinfo"
"github.com/dotcloud/docker/runconfig"
"github.com/dotcloud/docker/utils"
)
// Set the max depth to the aufs default that most
@@ -44,7 +47,7 @@ var (
validContainerNamePattern = regexp.MustCompile(`^/?` + validContainerNameChars + `+$`)
)
type Runtime struct {
type Daemon struct {
repository string
sysInitPath string
containers *list.List
@@ -76,17 +79,17 @@ func remountPrivate(mountPoint string) error {
return mount.ForceMount("", mountPoint, "none", "private")
}
// List returns an array of all containers registered in the runtime.
func (runtime *Runtime) List() []*Container {
// List returns an array of all containers registered in the daemon.
func (daemon *Daemon) List() []*Container {
containers := new(History)
for e := runtime.containers.Front(); e != nil; e = e.Next() {
for e := daemon.containers.Front(); e != nil; e = e.Next() {
containers.Add(e.Value.(*Container))
}
return *containers
}
func (runtime *Runtime) getContainerElement(id string) *list.Element {
for e := runtime.containers.Front(); e != nil; e = e.Next() {
func (daemon *Daemon) getContainerElement(id string) *list.Element {
for e := daemon.containers.Front(); e != nil; e = e.Next() {
container := e.Value.(*Container)
if container.ID == id {
return e
@@ -97,17 +100,17 @@ func (runtime *Runtime) getContainerElement(id string) *list.Element {
// Get looks for a container by the specified ID or name, and returns it.
// If the container is not found, or if an error occurs, nil is returned.
func (runtime *Runtime) Get(name string) *Container {
if c, _ := runtime.GetByName(name); c != nil {
func (daemon *Daemon) Get(name string) *Container {
if c, _ := daemon.GetByName(name); c != nil {
return c
}
id, err := runtime.idIndex.Get(name)
id, err := daemon.idIndex.Get(name)
if err != nil {
return nil
}
e := runtime.getContainerElement(id)
e := daemon.getContainerElement(id)
if e == nil {
return nil
}
@@ -116,43 +119,40 @@ func (runtime *Runtime) Get(name string) *Container {
// Exists returns a true if a container of the specified ID or name exists,
// false otherwise.
func (runtime *Runtime) Exists(id string) bool {
return runtime.Get(id) != nil
func (daemon *Daemon) Exists(id string) bool {
return daemon.Get(id) != nil
}
func (runtime *Runtime) containerRoot(id string) string {
return path.Join(runtime.repository, id)
func (daemon *Daemon) containerRoot(id string) string {
return path.Join(daemon.repository, id)
}
// Load reads the contents of a container from disk
// This is typically done at startup.
func (runtime *Runtime) load(id string) (*Container, error) {
container := &Container{root: runtime.containerRoot(id)}
func (daemon *Daemon) load(id string) (*Container, error) {
container := &Container{root: daemon.containerRoot(id)}
if err := container.FromDisk(); err != nil {
return nil, err
}
if container.ID != id {
return container, fmt.Errorf("Container %s is stored at %s", container.ID, id)
}
if container.State.IsRunning() {
container.State.SetGhost(true)
}
return container, nil
}
// Register makes a container object usable by the runtime as <container.ID>
func (runtime *Runtime) Register(container *Container) error {
if container.runtime != nil || runtime.Exists(container.ID) {
// Register makes a container object usable by the daemon as <container.ID>
func (daemon *Daemon) Register(container *Container) error {
if container.daemon != nil || daemon.Exists(container.ID) {
return fmt.Errorf("Container is already loaded")
}
if err := validateID(container.ID); err != nil {
return err
}
if err := runtime.ensureName(container); err != nil {
if err := daemon.ensureName(container); err != nil {
return err
}
container.runtime = runtime
container.daemon = daemon
// Attach to stdout and stderr
container.stderr = utils.NewWriteBroadcaster()
@@ -164,55 +164,50 @@ func (runtime *Runtime) Register(container *Container) error {
container.stdinPipe = utils.NopWriteCloser(ioutil.Discard) // Silently drop stdin
}
// done
runtime.containers.PushBack(container)
runtime.idIndex.Add(container.ID)
daemon.containers.PushBack(container)
daemon.idIndex.Add(container.ID)
// FIXME: if the container is supposed to be running but is not, auto restart it?
// if so, then we need to restart monitor and init a new lock
// If the container is supposed to be running, make sure of it
if container.State.IsRunning() {
if container.State.IsGhost() {
utils.Debugf("killing ghost %s", container.ID)
utils.Debugf("killing old running container %s", container.ID)
existingPid := container.State.Pid
container.State.SetGhost(false)
container.State.SetStopped(0)
existingPid := container.State.Pid
container.State.SetStopped(0)
// We only have to handle this for lxc because the other drivers will ensure that
// no ghost processes are left when docker dies
if container.ExecDriver == "" || strings.Contains(container.ExecDriver, "lxc") {
lxc.KillLxc(container.ID, 9)
} else {
// use the current driver and ensure that the container is dead x.x
cmd := &execdriver.Command{
ID: container.ID,
}
var err error
cmd.Process, err = os.FindProcess(existingPid)
if err != nil {
utils.Debugf("cannot find existing process for %d", existingPid)
}
runtime.execDriver.Terminate(cmd)
// We only have to handle this for lxc because the other drivers will ensure that
// no processes are left when docker dies
if container.ExecDriver == "" || strings.Contains(container.ExecDriver, "lxc") {
lxc.KillLxc(container.ID, 9)
} else {
// use the current driver and ensure that the container is dead x.x
cmd := &execdriver.Command{
ID: container.ID,
}
if err := container.Unmount(); err != nil {
utils.Debugf("ghost unmount error %s", err)
}
if err := container.ToDisk(); err != nil {
utils.Debugf("saving ghost state to disk %s", err)
var err error
cmd.Process, err = os.FindProcess(existingPid)
if err != nil {
utils.Debugf("cannot find existing process for %d", existingPid)
}
daemon.execDriver.Terminate(cmd)
}
if err := container.Unmount(); err != nil {
utils.Debugf("unmount error %s", err)
}
if err := container.ToDisk(); err != nil {
utils.Debugf("saving stopped state to disk %s", err)
}
info := runtime.execDriver.Info(container.ID)
info := daemon.execDriver.Info(container.ID)
if !info.IsRunning() {
utils.Debugf("Container %s was supposed to be running but is not.", container.ID)
if runtime.config.AutoRestart {
if daemon.config.AutoRestart {
utils.Debugf("Restarting")
if err := container.Unmount(); err != nil {
utils.Debugf("restart unmount error %s", err)
}
container.State.SetGhost(false)
container.State.SetStopped(0)
if err := container.Start(); err != nil {
return err
}
@@ -234,9 +229,9 @@ func (runtime *Runtime) Register(container *Container) error {
return nil
}
func (runtime *Runtime) ensureName(container *Container) error {
func (daemon *Daemon) ensureName(container *Container) error {
if container.Name == "" {
name, err := generateRandomName(runtime)
name, err := generateRandomName(daemon)
if err != nil {
name = utils.TruncateID(container.ID)
}
@@ -245,8 +240,8 @@ func (runtime *Runtime) ensureName(container *Container) error {
if err := container.ToDisk(); err != nil {
utils.Debugf("Error saving container name %s", err)
}
if !runtime.containerGraph.Exists(name) {
if _, err := runtime.containerGraph.Set(name, container.ID); err != nil {
if !daemon.containerGraph.Exists(name) {
if _, err := daemon.containerGraph.Set(name, container.ID); err != nil {
utils.Debugf("Setting default id - %s", err)
}
}
@@ -254,7 +249,7 @@ func (runtime *Runtime) ensureName(container *Container) error {
return nil
}
func (runtime *Runtime) LogToDisk(src *utils.WriteBroadcaster, dst, stream string) error {
func (daemon *Daemon) LogToDisk(src *utils.WriteBroadcaster, dst, stream string) error {
log, err := os.OpenFile(dst, os.O_RDWR|os.O_APPEND|os.O_CREATE, 0600)
if err != nil {
return err
@@ -263,13 +258,13 @@ func (runtime *Runtime) LogToDisk(src *utils.WriteBroadcaster, dst, stream strin
return nil
}
// Destroy unregisters a container from the runtime and cleanly removes its contents from the filesystem.
func (runtime *Runtime) Destroy(container *Container) error {
// Destroy unregisters a container from the daemon and cleanly removes its contents from the filesystem.
func (daemon *Daemon) Destroy(container *Container) error {
if container == nil {
return fmt.Errorf("The given container is <nil>")
}
element := runtime.getContainerElement(container.ID)
element := daemon.getContainerElement(container.ID)
if element == nil {
return fmt.Errorf("Container %v not found - maybe it was already destroyed?", container.ID)
}
@@ -278,42 +273,45 @@ func (runtime *Runtime) Destroy(container *Container) error {
return err
}
if err := runtime.driver.Remove(container.ID); err != nil {
return fmt.Errorf("Driver %s failed to remove root filesystem %s: %s", runtime.driver, container.ID, err)
// Deregister the container before removing its directory, to avoid race conditions
daemon.idIndex.Delete(container.ID)
daemon.containers.Remove(element)
if err := daemon.driver.Remove(container.ID); err != nil {
return fmt.Errorf("Driver %s failed to remove root filesystem %s: %s", daemon.driver, container.ID, err)
}
initID := fmt.Sprintf("%s-init", container.ID)
if err := runtime.driver.Remove(initID); err != nil {
return fmt.Errorf("Driver %s failed to remove init filesystem %s: %s", runtime.driver, initID, err)
if err := daemon.driver.Remove(initID); err != nil {
return fmt.Errorf("Driver %s failed to remove init filesystem %s: %s", daemon.driver, initID, err)
}
if _, err := runtime.containerGraph.Purge(container.ID); err != nil {
if _, err := daemon.containerGraph.Purge(container.ID); err != nil {
utils.Debugf("Unable to remove container from link graph: %s", err)
}
// Deregister the container before removing its directory, to avoid race conditions
runtime.idIndex.Delete(container.ID)
runtime.containers.Remove(element)
if err := os.RemoveAll(container.root); err != nil {
return fmt.Errorf("Unable to remove filesystem for %v: %v", container.ID, err)
}
selinux.FreeLxcContexts(container.ProcessLabel)
return nil
}
func (runtime *Runtime) restore() error {
func (daemon *Daemon) restore() error {
if os.Getenv("DEBUG") == "" && os.Getenv("TEST") == "" {
fmt.Printf("Loading containers: ")
}
dir, err := ioutil.ReadDir(runtime.repository)
dir, err := ioutil.ReadDir(daemon.repository)
if err != nil {
return err
}
containers := make(map[string]*Container)
currentDriver := runtime.driver.String()
currentDriver := daemon.driver.String()
for _, v := range dir {
id := v.Name()
container, err := runtime.load(id)
container, err := daemon.load(id)
if os.Getenv("DEBUG") == "" && os.Getenv("TEST") == "" {
fmt.Print(".")
}
@@ -332,12 +330,12 @@ func (runtime *Runtime) restore() error {
}
register := func(container *Container) {
if err := runtime.Register(container); err != nil {
if err := daemon.Register(container); err != nil {
utils.Debugf("Failed to register container %s: %s", container.ID, err)
}
}
if entities := runtime.containerGraph.List("/", -1); entities != nil {
if entities := daemon.containerGraph.List("/", -1); entities != nil {
for _, p := range entities.Paths() {
if os.Getenv("DEBUG") == "" && os.Getenv("TEST") == "" {
fmt.Print(".")
@@ -353,12 +351,12 @@ func (runtime *Runtime) restore() error {
// Any containers that are left over do not exist in the graph
for _, container := range containers {
// Try to set the default name for a container if it exists prior to links
container.Name, err = generateRandomName(runtime)
container.Name, err = generateRandomName(daemon)
if err != nil {
container.Name = utils.TruncateID(container.ID)
}
if _, err := runtime.containerGraph.Set(container.Name, container.ID); err != nil {
if _, err := daemon.containerGraph.Set(container.Name, container.ID); err != nil {
utils.Debugf("Setting default id - %s", err)
}
register(container)
@@ -372,38 +370,38 @@ func (runtime *Runtime) restore() error {
}
// Create creates a new container from the given configuration with a given name.
func (runtime *Runtime) Create(config *runconfig.Config, name string) (*Container, []string, error) {
func (daemon *Daemon) Create(config *runconfig.Config, name string) (*Container, []string, error) {
var (
container *Container
warnings []string
)
img, err := runtime.repositories.LookupImage(config.Image)
img, err := daemon.repositories.LookupImage(config.Image)
if err != nil {
return nil, nil, err
}
if err := runtime.checkImageDepth(img); err != nil {
if err := daemon.checkImageDepth(img); err != nil {
return nil, nil, err
}
if warnings, err = runtime.mergeAndVerifyConfig(config, img); err != nil {
if warnings, err = daemon.mergeAndVerifyConfig(config, img); err != nil {
return nil, nil, err
}
if container, err = runtime.newContainer(name, config, img); err != nil {
if container, err = daemon.newContainer(name, config, img); err != nil {
return nil, nil, err
}
if err := runtime.createRootfs(container, img); err != nil {
if err := daemon.createRootfs(container, img); err != nil {
return nil, nil, err
}
if err := container.ToDisk(); err != nil {
return nil, nil, err
}
if err := runtime.Register(container); err != nil {
if err := daemon.Register(container); err != nil {
return nil, nil, err
}
return container, warnings, nil
}
func (runtime *Runtime) checkImageDepth(img *image.Image) error {
func (daemon *Daemon) checkImageDepth(img *image.Image) error {
// We add 2 layers to the depth because the container's rw and
// init layer add to the restriction
depth, err := img.Depth()
@@ -416,7 +414,7 @@ func (runtime *Runtime) checkImageDepth(img *image.Image) error {
return nil
}
func (runtime *Runtime) checkDeprecatedExpose(config *runconfig.Config) bool {
func (daemon *Daemon) checkDeprecatedExpose(config *runconfig.Config) bool {
if config != nil {
if config.PortSpecs != nil {
for _, p := range config.PortSpecs {
@@ -429,9 +427,9 @@ func (runtime *Runtime) checkDeprecatedExpose(config *runconfig.Config) bool {
return false
}
func (runtime *Runtime) mergeAndVerifyConfig(config *runconfig.Config, img *image.Image) ([]string, error) {
func (daemon *Daemon) mergeAndVerifyConfig(config *runconfig.Config, img *image.Image) ([]string, error) {
warnings := []string{}
if runtime.checkDeprecatedExpose(img.Config) || runtime.checkDeprecatedExpose(config) {
if daemon.checkDeprecatedExpose(img.Config) || daemon.checkDeprecatedExpose(config) {
warnings = append(warnings, "The mapping to public ports on your host via Dockerfile EXPOSE (host:port:port) has been deprecated. Use -p to publish the ports.")
}
if img.Config != nil {
@@ -445,14 +443,14 @@ func (runtime *Runtime) mergeAndVerifyConfig(config *runconfig.Config, img *imag
return warnings, nil
}
func (runtime *Runtime) generateIdAndName(name string) (string, string, error) {
func (daemon *Daemon) generateIdAndName(name string) (string, string, error) {
var (
err error
id = utils.GenerateRandomID()
)
if name == "" {
name, err = generateRandomName(runtime)
name, err = generateRandomName(daemon)
if err != nil {
name = utils.TruncateID(id)
}
@@ -465,19 +463,19 @@ func (runtime *Runtime) generateIdAndName(name string) (string, string, error) {
name = "/" + name
}
// Set the enitity in the graph using the default name specified
if _, err := runtime.containerGraph.Set(name, id); err != nil {
if _, err := daemon.containerGraph.Set(name, id); err != nil {
if !graphdb.IsNonUniqueNameError(err) {
return "", "", err
}
conflictingContainer, err := runtime.GetByName(name)
conflictingContainer, err := daemon.GetByName(name)
if err != nil {
if strings.Contains(err.Error(), "Could not find entity") {
return "", "", err
}
// Remove name and continue starting the container
if err := runtime.containerGraph.Delete(name); err != nil {
if err := daemon.containerGraph.Delete(name); err != nil {
return "", "", err
}
} else {
@@ -490,7 +488,7 @@ func (runtime *Runtime) generateIdAndName(name string) (string, string, error) {
return id, name, nil
}
func (runtime *Runtime) generateHostname(id string, config *runconfig.Config) {
func (daemon *Daemon) generateHostname(id string, config *runconfig.Config) {
// Generate default hostname
// FIXME: the lxc template no longer needs to set a default hostname
if config.Hostname == "" {
@@ -498,7 +496,7 @@ func (runtime *Runtime) generateHostname(id string, config *runconfig.Config) {
}
}
func (runtime *Runtime) getEntrypointAndArgs(config *runconfig.Config) (string, []string) {
func (daemon *Daemon) getEntrypointAndArgs(config *runconfig.Config) (string, []string) {
var (
entrypoint string
args []string
@@ -513,18 +511,18 @@ func (runtime *Runtime) getEntrypointAndArgs(config *runconfig.Config) (string,
return entrypoint, args
}
func (runtime *Runtime) newContainer(name string, config *runconfig.Config, img *image.Image) (*Container, error) {
func (daemon *Daemon) newContainer(name string, config *runconfig.Config, img *image.Image) (*Container, error) {
var (
id string
err error
)
id, name, err = runtime.generateIdAndName(name)
id, name, err = daemon.generateIdAndName(name)
if err != nil {
return nil, err
}
runtime.generateHostname(id, config)
entrypoint, args := runtime.getEntrypointAndArgs(config)
daemon.generateHostname(id, config)
entrypoint, args := daemon.getEntrypointAndArgs(config)
container := &Container{
// FIXME: we should generate the ID here instead of receiving it as an argument
@@ -537,34 +535,38 @@ func (runtime *Runtime) newContainer(name string, config *runconfig.Config, img
Image: img.ID, // Always use the resolved image id
NetworkSettings: &NetworkSettings{},
Name: name,
Driver: runtime.driver.String(),
ExecDriver: runtime.execDriver.Name(),
Driver: daemon.driver.String(),
ExecDriver: daemon.execDriver.Name(),
}
container.root = daemon.containerRoot(container.ID)
if container.ProcessLabel, container.MountLabel, err = label.GenLabels(""); err != nil {
return nil, err
}
container.root = runtime.containerRoot(container.ID)
return container, nil
}
func (runtime *Runtime) createRootfs(container *Container, img *image.Image) error {
func (daemon *Daemon) createRootfs(container *Container, img *image.Image) error {
// Step 1: create the container directory.
// This doubles as a barrier to avoid race conditions.
if err := os.Mkdir(container.root, 0700); err != nil {
return err
}
initID := fmt.Sprintf("%s-init", container.ID)
if err := runtime.driver.Create(initID, img.ID, ""); err != nil {
if err := daemon.driver.Create(initID, img.ID); err != nil {
return err
}
initPath, err := runtime.driver.Get(initID)
initPath, err := daemon.driver.Get(initID, "")
if err != nil {
return err
}
defer runtime.driver.Put(initID)
defer daemon.driver.Put(initID)
if err := graph.SetupInitLayer(initPath); err != nil {
return err
}
if err := runtime.driver.Create(container.ID, initID, ""); err != nil {
if err := daemon.driver.Create(container.ID, initID); err != nil {
return err
}
return nil
@@ -572,7 +574,7 @@ func (runtime *Runtime) createRootfs(container *Container, img *image.Image) err
// Commit creates a new filesystem image from the current state of a container.
// The image can optionally be tagged into a repository
func (runtime *Runtime) Commit(container *Container, repository, tag, comment, author string, config *runconfig.Config) (*image.Image, error) {
func (daemon *Daemon) Commit(container *Container, repository, tag, comment, author string, config *runconfig.Config) (*image.Image, error) {
// FIXME: freeze the container before copying it to avoid data corruption?
if err := container.Mount(); err != nil {
return nil, err
@@ -595,13 +597,13 @@ func (runtime *Runtime) Commit(container *Container, repository, tag, comment, a
containerImage = container.Image
containerConfig = container.Config
}
img, err := runtime.graph.Create(rwTar, containerID, containerImage, comment, author, containerConfig, config)
img, err := daemon.graph.Create(rwTar, containerID, containerImage, comment, author, containerConfig, config)
if err != nil {
return nil, err
}
// Register the image if needed
if repository != "" {
if err := runtime.repositories.Set(repository, tag, img.ID, true); err != nil {
if err := daemon.repositories.Set(repository, tag, img.ID, true); err != nil {
return img, err
}
}
@@ -618,31 +620,31 @@ func GetFullContainerName(name string) (string, error) {
return name, nil
}
func (runtime *Runtime) GetByName(name string) (*Container, error) {
func (daemon *Daemon) GetByName(name string) (*Container, error) {
fullName, err := GetFullContainerName(name)
if err != nil {
return nil, err
}
entity := runtime.containerGraph.Get(fullName)
entity := daemon.containerGraph.Get(fullName)
if entity == nil {
return nil, fmt.Errorf("Could not find entity for %s", name)
}
e := runtime.getContainerElement(entity.ID())
e := daemon.getContainerElement(entity.ID())
if e == nil {
return nil, fmt.Errorf("Could not find container for entity id %s", entity.ID())
}
return e.Value.(*Container), nil
}
func (runtime *Runtime) Children(name string) (map[string]*Container, error) {
func (daemon *Daemon) Children(name string) (map[string]*Container, error) {
name, err := GetFullContainerName(name)
if err != nil {
return nil, err
}
children := make(map[string]*Container)
err = runtime.containerGraph.Walk(name, func(p string, e *graphdb.Entity) error {
c := runtime.Get(e.ID())
err = daemon.containerGraph.Walk(name, func(p string, e *graphdb.Entity) error {
c := daemon.Get(e.ID())
if c == nil {
return fmt.Errorf("Could not get container for name %s and id %s", e.ID(), p)
}
@@ -656,29 +658,28 @@ func (runtime *Runtime) Children(name string) (map[string]*Container, error) {
return children, nil
}
func (runtime *Runtime) RegisterLink(parent, child *Container, alias string) error {
func (daemon *Daemon) RegisterLink(parent, child *Container, alias string) error {
fullName := path.Join(parent.Name, alias)
if !runtime.containerGraph.Exists(fullName) {
_, err := runtime.containerGraph.Set(fullName, child.ID)
if !daemon.containerGraph.Exists(fullName) {
_, err := daemon.containerGraph.Set(fullName, child.ID)
return err
}
return nil
}
// FIXME: harmonize with NewGraph()
func NewRuntime(config *daemonconfig.Config, eng *engine.Engine) (*Runtime, error) {
runtime, err := NewRuntimeFromDirectory(config, eng)
func NewDaemon(config *daemonconfig.Config, eng *engine.Engine) (*Daemon, error) {
daemon, err := NewDaemonFromDirectory(config, eng)
if err != nil {
return nil, err
}
return runtime, nil
return daemon, nil
}
func NewRuntimeFromDirectory(config *daemonconfig.Config, eng *engine.Engine) (*Runtime, error) {
func NewDaemonFromDirectory(config *daemonconfig.Config, eng *engine.Engine) (*Daemon, error) {
if !config.EnableSelinuxSupport {
selinux.SetDisabled()
}
// Set the default driver
graphdriver.DefaultDriver = config.GraphDriver
@@ -693,9 +694,9 @@ func NewRuntimeFromDirectory(config *daemonconfig.Config, eng *engine.Engine) (*
return nil, err
}
runtimeRepo := path.Join(config.Root, "containers")
daemonRepo := path.Join(config.Root, "containers")
if err := os.MkdirAll(runtimeRepo, 0700); err != nil && !os.IsExist(err) {
if err := os.MkdirAll(daemonRepo, 0700); err != nil && !os.IsExist(err) {
return nil, err
}
@@ -774,12 +775,12 @@ func NewRuntimeFromDirectory(config *daemonconfig.Config, eng *engine.Engine) (*
return nil, err
}
runtime := &Runtime{
repository: runtimeRepo,
daemon := &Daemon{
repository: daemonRepo,
containers: list.New(),
graph: g,
repositories: repositories,
idIndex: utils.NewTruncIndex(),
idIndex: utils.NewTruncIndex([]string{}),
sysInfo: sysInfo,
volumes: volumes,
config: config,
@@ -790,19 +791,19 @@ func NewRuntimeFromDirectory(config *daemonconfig.Config, eng *engine.Engine) (*
eng: eng,
}
if err := runtime.checkLocaldns(); err != nil {
if err := daemon.checkLocaldns(); err != nil {
return nil, err
}
if err := runtime.restore(); err != nil {
if err := daemon.restore(); err != nil {
return nil, err
}
return runtime, nil
return daemon, nil
}
func (runtime *Runtime) shutdown() error {
func (daemon *Daemon) shutdown() error {
group := sync.WaitGroup{}
utils.Debugf("starting clean shutdown of all containers...")
for _, container := range runtime.List() {
for _, container := range daemon.List() {
c := container
if c.State.IsRunning() {
utils.Debugf("stopping %s", c.ID)
@@ -823,22 +824,22 @@ func (runtime *Runtime) shutdown() error {
return nil
}
func (runtime *Runtime) Close() error {
func (daemon *Daemon) Close() error {
errorsStrings := []string{}
if err := runtime.shutdown(); err != nil {
utils.Errorf("runtime.shutdown(): %s", err)
if err := daemon.shutdown(); err != nil {
utils.Errorf("daemon.shutdown(): %s", err)
errorsStrings = append(errorsStrings, err.Error())
}
if err := portallocator.ReleaseAll(); err != nil {
utils.Errorf("portallocator.ReleaseAll(): %s", err)
errorsStrings = append(errorsStrings, err.Error())
}
if err := runtime.driver.Cleanup(); err != nil {
utils.Errorf("runtime.driver.Cleanup(): %s", err.Error())
if err := daemon.driver.Cleanup(); err != nil {
utils.Errorf("daemon.driver.Cleanup(): %s", err.Error())
errorsStrings = append(errorsStrings, err.Error())
}
if err := runtime.containerGraph.Close(); err != nil {
utils.Errorf("runtime.containerGraph.Close(): %s", err.Error())
if err := daemon.containerGraph.Close(); err != nil {
utils.Errorf("daemon.containerGraph.Close(): %s", err.Error())
errorsStrings = append(errorsStrings, err.Error())
}
if len(errorsStrings) > 0 {
@@ -847,55 +848,55 @@ func (runtime *Runtime) Close() error {
return nil
}
func (runtime *Runtime) Mount(container *Container) error {
dir, err := runtime.driver.Get(container.ID)
func (daemon *Daemon) Mount(container *Container) error {
dir, err := daemon.driver.Get(container.ID, container.GetMountLabel())
if err != nil {
return fmt.Errorf("Error getting container %s from driver %s: %s", container.ID, runtime.driver, err)
return fmt.Errorf("Error getting container %s from driver %s: %s", container.ID, daemon.driver, err)
}
if container.basefs == "" {
container.basefs = dir
} else if container.basefs != dir {
return fmt.Errorf("Error: driver %s is returning inconsistent paths for container %s ('%s' then '%s')",
runtime.driver, container.ID, container.basefs, dir)
daemon.driver, container.ID, container.basefs, dir)
}
return nil
}
func (runtime *Runtime) Unmount(container *Container) error {
runtime.driver.Put(container.ID)
func (daemon *Daemon) Unmount(container *Container) error {
daemon.driver.Put(container.ID)
return nil
}
func (runtime *Runtime) Changes(container *Container) ([]archive.Change, error) {
if differ, ok := runtime.driver.(graphdriver.Differ); ok {
func (daemon *Daemon) Changes(container *Container) ([]archive.Change, error) {
if differ, ok := daemon.driver.(graphdriver.Differ); ok {
return differ.Changes(container.ID)
}
cDir, err := runtime.driver.Get(container.ID)
cDir, err := daemon.driver.Get(container.ID, "")
if err != nil {
return nil, fmt.Errorf("Error getting container rootfs %s from driver %s: %s", container.ID, container.runtime.driver, err)
return nil, fmt.Errorf("Error getting container rootfs %s from driver %s: %s", container.ID, container.daemon.driver, err)
}
defer runtime.driver.Put(container.ID)
initDir, err := runtime.driver.Get(container.ID + "-init")
defer daemon.driver.Put(container.ID)
initDir, err := daemon.driver.Get(container.ID+"-init", "")
if err != nil {
return nil, fmt.Errorf("Error getting container init rootfs %s from driver %s: %s", container.ID, container.runtime.driver, err)
return nil, fmt.Errorf("Error getting container init rootfs %s from driver %s: %s", container.ID, container.daemon.driver, err)
}
defer runtime.driver.Put(container.ID + "-init")
defer daemon.driver.Put(container.ID + "-init")
return archive.ChangesDirs(cDir, initDir)
}
func (runtime *Runtime) Diff(container *Container) (archive.Archive, error) {
if differ, ok := runtime.driver.(graphdriver.Differ); ok {
func (daemon *Daemon) Diff(container *Container) (archive.Archive, error) {
if differ, ok := daemon.driver.(graphdriver.Differ); ok {
return differ.Diff(container.ID)
}
changes, err := runtime.Changes(container)
changes, err := daemon.Changes(container)
if err != nil {
return nil, err
}
cDir, err := runtime.driver.Get(container.ID)
cDir, err := daemon.driver.Get(container.ID, "")
if err != nil {
return nil, fmt.Errorf("Error getting container rootfs %s from driver %s: %s", container.ID, container.runtime.driver, err)
return nil, fmt.Errorf("Error getting container rootfs %s from driver %s: %s", container.ID, container.daemon.driver, err)
}
archive, err := archive.ExportChanges(cDir, changes)
@@ -904,26 +905,26 @@ func (runtime *Runtime) Diff(container *Container) (archive.Archive, error) {
}
return utils.NewReadCloserWrapper(archive, func() error {
err := archive.Close()
runtime.driver.Put(container.ID)
daemon.driver.Put(container.ID)
return err
}), nil
}
func (runtime *Runtime) Run(c *Container, pipes *execdriver.Pipes, startCallback execdriver.StartCallback) (int, error) {
return runtime.execDriver.Run(c.command, pipes, startCallback)
func (daemon *Daemon) Run(c *Container, pipes *execdriver.Pipes, startCallback execdriver.StartCallback) (int, error) {
return daemon.execDriver.Run(c.command, pipes, startCallback)
}
func (runtime *Runtime) Kill(c *Container, sig int) error {
return runtime.execDriver.Kill(c.command, sig)
func (daemon *Daemon) Kill(c *Container, sig int) error {
return daemon.execDriver.Kill(c.command, sig)
}
// Nuke kills all containers then removes all content
// from the content root, including images, volumes and
// container filesystems.
// Again: this will remove your entire docker runtime!
func (runtime *Runtime) Nuke() error {
// Again: this will remove your entire docker daemon!
func (daemon *Daemon) Nuke() error {
var wg sync.WaitGroup
for _, container := range runtime.List() {
for _, container := range daemon.List() {
wg.Add(1)
go func(c *Container) {
c.Kill()
@@ -931,63 +932,63 @@ func (runtime *Runtime) Nuke() error {
}(container)
}
wg.Wait()
runtime.Close()
daemon.Close()
return os.RemoveAll(runtime.config.Root)
return os.RemoveAll(daemon.config.Root)
}
// FIXME: this is a convenience function for integration tests
// which need direct access to runtime.graph.
// which need direct access to daemon.graph.
// Once the tests switch to using engine and jobs, this method
// can go away.
func (runtime *Runtime) Graph() *graph.Graph {
return runtime.graph
func (daemon *Daemon) Graph() *graph.Graph {
return daemon.graph
}
func (runtime *Runtime) Repositories() *graph.TagStore {
return runtime.repositories
func (daemon *Daemon) Repositories() *graph.TagStore {
return daemon.repositories
}
func (runtime *Runtime) Config() *daemonconfig.Config {
return runtime.config
func (daemon *Daemon) Config() *daemonconfig.Config {
return daemon.config
}
func (runtime *Runtime) SystemConfig() *sysinfo.SysInfo {
return runtime.sysInfo
func (daemon *Daemon) SystemConfig() *sysinfo.SysInfo {
return daemon.sysInfo
}
func (runtime *Runtime) SystemInitPath() string {
return runtime.sysInitPath
func (daemon *Daemon) SystemInitPath() string {
return daemon.sysInitPath
}
func (runtime *Runtime) GraphDriver() graphdriver.Driver {
return runtime.driver
func (daemon *Daemon) GraphDriver() graphdriver.Driver {
return daemon.driver
}
func (runtime *Runtime) ExecutionDriver() execdriver.Driver {
return runtime.execDriver
func (daemon *Daemon) ExecutionDriver() execdriver.Driver {
return daemon.execDriver
}
func (runtime *Runtime) Volumes() *graph.Graph {
return runtime.volumes
func (daemon *Daemon) Volumes() *graph.Graph {
return daemon.volumes
}
func (runtime *Runtime) ContainerGraph() *graphdb.Database {
return runtime.containerGraph
func (daemon *Daemon) ContainerGraph() *graphdb.Database {
return daemon.containerGraph
}
func (runtime *Runtime) SetServer(server Server) {
runtime.srv = server
func (daemon *Daemon) SetServer(server Server) {
daemon.srv = server
}
func (runtime *Runtime) checkLocaldns() error {
resolvConf, err := utils.GetResolvConf()
func (daemon *Daemon) checkLocaldns() error {
resolvConf, err := resolvconf.Get()
if err != nil {
return err
}
if len(runtime.config.Dns) == 0 && utils.CheckLocalDns(resolvConf) {
if len(daemon.config.Dns) == 0 && utils.CheckLocalDns(resolvConf) {
log.Printf("Local (127.0.0.1) DNS resolver found in resolv.conf and containers can't use it. Using default external servers : %v\n", DefaultDns)
runtime.config.Dns = DefaultDns
daemon.config.Dns = DefaultDns
}
return nil
}
@@ -1,11 +1,11 @@
// +build !exclude_graphdriver_aufs
package runtime
package daemon
import (
"github.com/dotcloud/docker/daemon/graphdriver"
"github.com/dotcloud/docker/daemon/graphdriver/aufs"
"github.com/dotcloud/docker/graph"
"github.com/dotcloud/docker/runtime/graphdriver"
"github.com/dotcloud/docker/runtime/graphdriver/aufs"
"github.com/dotcloud/docker/utils"
)
+7
View File
@@ -0,0 +1,7 @@
// +build !exclude_graphdriver_btrfs
package daemon
import (
_ "github.com/dotcloud/docker/daemon/graphdriver/btrfs"
)
+7
View File
@@ -0,0 +1,7 @@
// +build !exclude_graphdriver_devicemapper
package daemon
import (
_ "github.com/dotcloud/docker/daemon/graphdriver/devmapper"
)
@@ -1,9 +1,9 @@
// +build exclude_graphdriver_aufs
package runtime
package daemon
import (
"github.com/dotcloud/docker/runtime/graphdriver"
"github.com/dotcloud/docker/daemon/graphdriver"
)
func migrateIfAufs(driver graphdriver.Driver, root string) error {
@@ -89,8 +89,10 @@ type Driver interface {
// Network settings of the container
type Network struct {
Interface *NetworkInterface `json:"interface"` // if interface is nil then networking is disabled
Mtu int `json:"mtu"`
Interface *NetworkInterface `json:"interface"` // if interface is nil then networking is disabled
Mtu int `json:"mtu"`
ContainerID string `json:"container_id"` // id of the container to join network.
HostNetworking bool `json:"host_networking"`
}
type NetworkInterface struct {
@@ -2,10 +2,10 @@ package execdrivers
import (
"fmt"
"github.com/dotcloud/docker/daemon/execdriver"
"github.com/dotcloud/docker/daemon/execdriver/lxc"
"github.com/dotcloud/docker/daemon/execdriver/native"
"github.com/dotcloud/docker/pkg/sysinfo"
"github.com/dotcloud/docker/runtime/execdriver"
"github.com/dotcloud/docker/runtime/execdriver/lxc"
"github.com/dotcloud/docker/runtime/execdriver/native"
"path"
)
@@ -1,11 +1,8 @@
package lxc
import (
"encoding/json"
"fmt"
"github.com/dotcloud/docker/pkg/cgroups"
"github.com/dotcloud/docker/pkg/label"
"github.com/dotcloud/docker/runtime/execdriver"
"github.com/dotcloud/docker/utils"
"io/ioutil"
"log"
"os"
@@ -16,6 +13,12 @@ import (
"strings"
"syscall"
"time"
"github.com/dotcloud/docker/daemon/execdriver"
"github.com/dotcloud/docker/pkg/cgroups"
"github.com/dotcloud/docker/pkg/label"
"github.com/dotcloud/docker/pkg/system"
"github.com/dotcloud/docker/utils"
)
const DriverName = "lxc"
@@ -25,23 +28,21 @@ func init() {
if err := setupEnv(args); err != nil {
return err
}
if err := setupHostname(args); err != nil {
return err
}
if err := setupNetworking(args); err != nil {
return err
}
if err := setupCapabilities(args); err != nil {
return err
}
if err := setupWorkingDirectory(args); err != nil {
return err
}
if err := system.CloseFdsFrom(3); err != nil {
return err
}
if err := changeUser(args); err != nil {
return err
}
@@ -85,6 +86,9 @@ func (d *driver) Run(c *execdriver.Command, pipes *execdriver.Pipes, startCallba
if err := execdriver.SetTerminal(c, pipes); err != nil {
return -1, err
}
if err := d.generateEnvConfig(c); err != nil {
return -1, err
}
configPath, err := d.generateLXCConfig(c)
if err != nil {
return -1, err
@@ -416,3 +420,14 @@ func (d *driver) generateLXCConfig(c *execdriver.Command) (string, error) {
}
return root, nil
}
func (d *driver) generateEnvConfig(c *execdriver.Command) error {
data, err := json.Marshal(c.Env)
if err != nil {
return err
}
p := path.Join(d.root, "containers", c.ID, "config.env")
c.Mounts = append(c.Mounts, execdriver.Mount{p, "/.dockerenv", false, true})
return ioutil.WriteFile(p, data, 0600)
}
@@ -3,15 +3,16 @@ package lxc
import (
"encoding/json"
"fmt"
"github.com/dotcloud/docker/pkg/netlink"
"github.com/dotcloud/docker/pkg/user"
"github.com/dotcloud/docker/runtime/execdriver"
"github.com/syndtr/gocapability/capability"
"io/ioutil"
"net"
"os"
"strings"
"syscall"
"github.com/dotcloud/docker/daemon/execdriver"
"github.com/dotcloud/docker/pkg/netlink"
"github.com/dotcloud/docker/pkg/user"
"github.com/syndtr/gocapability/capability"
)
// Clear environment pollution introduced by lxc-start
@@ -149,6 +150,7 @@ func setupCapabilities(args *execdriver.InitArgs) error {
capability.CAP_MAC_OVERRIDE,
capability.CAP_MAC_ADMIN,
capability.CAP_NET_ADMIN,
capability.CAP_SYSLOG,
}
c, err := capability.NewPid(os.Getpid())
@@ -1,10 +1,11 @@
package lxc
import (
"github.com/dotcloud/docker/pkg/label"
"github.com/dotcloud/docker/runtime/execdriver"
"strings"
"text/template"
"github.com/dotcloud/docker/daemon/execdriver"
"github.com/dotcloud/docker/pkg/label"
)
const LxcTemplate = `
@@ -13,12 +14,13 @@ const LxcTemplate = `
lxc.network.type = veth
lxc.network.link = {{.Network.Interface.Bridge}}
lxc.network.name = eth0
{{else}}
lxc.network.mtu = {{.Network.Mtu}}
{{else if not .Network.HostNetworking}}
# network is disabled (-n=false)
lxc.network.type = empty
lxc.network.flags = up
{{end}}
lxc.network.mtu = {{.Network.Mtu}}
{{end}}
# root filesystem
{{$ROOTFS := .Rootfs}}
@@ -82,12 +84,11 @@ lxc.pivotdir = lxc_putold
# NOTICE: These mounts must be applied within the namespace
# WARNING: procfs is a known attack vector and should probably be disabled
# if your userspace allows it. eg. see http://blog.zx2c4.com/749
# WARNING: mounting procfs and/or sysfs read-write is a known attack vector.
# See e.g. http://blog.zx2c4.com/749 and http://bit.ly/T9CkqJ
# We mount them read-write here, but later, dockerinit will call the Restrict() function to remount them read-only.
# We cannot mount them directly read-only, because that would prevent loading AppArmor profiles.
lxc.mount.entry = proc {{escapeFstabSpaces $ROOTFS}}/proc proc nosuid,nodev,noexec 0 0
# WARNING: sysfs is a known attack vector and should probably be disabled
# if your userspace allows it. eg. see http://bit.ly/T9CkqJ
lxc.mount.entry = sysfs {{escapeFstabSpaces $ROOTFS}}/sys sysfs nosuid,nodev,noexec 0 0
{{if .Tty}}
@@ -109,7 +110,7 @@ lxc.mount.entry = {{$value.Source}} {{escapeFstabSpaces $ROOTFS}}/{{escapeFstabS
{{if .AppArmor}}
lxc.aa_profile = unconfined
{{else}}
#lxc.aa_profile = unconfined
# Let AppArmor normal confinement take place (i.e., not unconfined)
{{end}}
{{end}}
@@ -3,7 +3,7 @@ package lxc
import (
"bufio"
"fmt"
"github.com/dotcloud/docker/runtime/execdriver"
"github.com/dotcloud/docker/daemon/execdriver"
"io/ioutil"
"math/rand"
"os"
@@ -2,12 +2,13 @@ package configuration
import (
"fmt"
"github.com/dotcloud/docker/pkg/libcontainer"
"github.com/dotcloud/docker/utils"
"os/exec"
"path/filepath"
"strconv"
"strings"
"github.com/dotcloud/docker/pkg/libcontainer"
"github.com/dotcloud/docker/utils"
)
type Action func(*libcontainer.Container, interface{}, string) error
@@ -21,10 +22,13 @@ var actions = map[string]Action{
"net.join": joinNetNamespace, // join another containers net namespace
"cgroups.cpu_shares": cpuShares, // set the cpu shares
"cgroups.memory": memory, // set the memory limit
"cgroups.memory_swap": memorySwap, // set the memory swap limit
"cgroups.cpuset.cpus": cpusetCpus, // set the cpus used
"cgroups.cpu_shares": cpuShares, // set the cpu shares
"cgroups.memory": memory, // set the memory limit
"cgroups.memory_reservation": memoryReservation, // set the memory reservation
"cgroups.memory_swap": memorySwap, // set the memory swap limit
"cgroups.cpuset.cpus": cpusetCpus, // set the cpus used
"systemd.slice": systemdSlice, // set parent Slice used for systemd unit
"apparmor_profile": apparmorProfile, // set the apparmor profile to apply
@@ -40,6 +44,15 @@ func cpusetCpus(container *libcontainer.Container, context interface{}, value st
return nil
}
func systemdSlice(container *libcontainer.Container, context interface{}, value string) error {
if container.Cgroups == nil {
return fmt.Errorf("cannot set slice when cgroups are disabled")
}
container.Cgroups.Slice = value
return nil
}
func apparmorProfile(container *libcontainer.Container, context interface{}, value string) error {
container.Context["apparmor_profile"] = value
return nil
@@ -70,6 +83,19 @@ func memory(container *libcontainer.Container, context interface{}, value string
return nil
}
func memoryReservation(container *libcontainer.Container, context interface{}, value string) error {
if container.Cgroups == nil {
return fmt.Errorf("cannot set cgroups when they are disabled")
}
v, err := utils.RAMInBytes(value)
if err != nil {
return err
}
container.Cgroups.MemoryReservation = v
return nil
}
func memorySwap(container *libcontainer.Container, context interface{}, value string) error {
if container.Cgroups == nil {
return fmt.Errorf("cannot set cgroups when they are disabled")
@@ -83,38 +109,22 @@ func memorySwap(container *libcontainer.Container, context interface{}, value st
}
func addCap(container *libcontainer.Container, context interface{}, value string) error {
c := container.CapabilitiesMask.Get(value)
if c == nil {
return fmt.Errorf("%s is not a valid capability", value)
}
c.Enabled = true
container.CapabilitiesMask[value] = true
return nil
}
func dropCap(container *libcontainer.Container, context interface{}, value string) error {
c := container.CapabilitiesMask.Get(value)
if c == nil {
return fmt.Errorf("%s is not a valid capability", value)
}
c.Enabled = false
container.CapabilitiesMask[value] = false
return nil
}
func addNamespace(container *libcontainer.Container, context interface{}, value string) error {
ns := container.Namespaces.Get(value)
if ns == nil {
return fmt.Errorf("%s is not a valid namespace", value[1:])
}
ns.Enabled = true
container.Namespaces[value] = true
return nil
}
func dropNamespace(container *libcontainer.Container, context interface{}, value string) error {
ns := container.Namespaces.Get(value)
if ns == nil {
return fmt.Errorf("%s is not a valid namespace", value[1:])
}
ns.Enabled = false
container.Namespaces[value] = false
return nil
}
@@ -1,8 +1,9 @@
package configuration
import (
"github.com/dotcloud/docker/runtime/execdriver/native/template"
"testing"
"github.com/dotcloud/docker/daemon/execdriver/native/template"
)
func TestSetReadonlyRootFs(t *testing.T) {
@@ -38,10 +39,10 @@ func TestConfigurationsDoNotConflict(t *testing.T) {
t.Fatal(err)
}
if !container1.CapabilitiesMask.Get("NET_ADMIN").Enabled {
if !container1.CapabilitiesMask["NET_ADMIN"] {
t.Fatal("container one should have NET_ADMIN enabled")
}
if container2.CapabilitiesMask.Get("NET_ADMIN").Enabled {
if container2.CapabilitiesMask["NET_ADMIN"] {
t.Fatal("container two should not have NET_ADMIN enabled")
}
}
@@ -93,7 +94,7 @@ func TestCpuShares(t *testing.T) {
}
}
func TestCgroupMemory(t *testing.T) {
func TestMemory(t *testing.T) {
var (
container = template.New()
opts = []string{
@@ -109,6 +110,22 @@ func TestCgroupMemory(t *testing.T) {
}
}
func TestMemoryReservation(t *testing.T) {
var (
container = template.New()
opts = []string{
"cgroups.memory_reservation=500m",
}
)
if err := ParseConfiguration(container, nil, opts); err != nil {
t.Fatal(err)
}
if expected := int64(500 * 1024 * 1024); container.Cgroups.MemoryReservation != expected {
t.Fatalf("expected memory reservation %d got %d", expected, container.Cgroups.MemoryReservation)
}
}
func TestAddCap(t *testing.T) {
var (
container = template.New()
@@ -121,10 +138,10 @@ func TestAddCap(t *testing.T) {
t.Fatal(err)
}
if !container.CapabilitiesMask.Get("MKNOD").Enabled {
if !container.CapabilitiesMask["MKNOD"] {
t.Fatal("container should have MKNOD enabled")
}
if !container.CapabilitiesMask.Get("SYS_ADMIN").Enabled {
if !container.CapabilitiesMask["SYS_ADMIN"] {
t.Fatal("container should have SYS_ADMIN enabled")
}
}
@@ -137,14 +154,14 @@ func TestDropCap(t *testing.T) {
}
)
// enabled all caps like in privileged mode
for _, c := range container.CapabilitiesMask {
c.Enabled = true
for key := range container.CapabilitiesMask {
container.CapabilitiesMask[key] = true
}
if err := ParseConfiguration(container, nil, opts); err != nil {
t.Fatal(err)
}
if container.CapabilitiesMask.Get("MKNOD").Enabled {
if container.CapabilitiesMask["MKNOD"] {
t.Fatal("container should not have MKNOD enabled")
}
}
@@ -160,7 +177,7 @@ func TestDropNamespace(t *testing.T) {
t.Fatal(err)
}
if container.Namespaces.Get("NEWNET").Enabled {
if container.Namespaces["NEWNET"] {
t.Fatal("container should not have NEWNET enabled")
}
}
@@ -3,12 +3,13 @@ package native
import (
"fmt"
"os"
"path/filepath"
"github.com/dotcloud/docker/pkg/label"
"github.com/dotcloud/docker/daemon/execdriver"
"github.com/dotcloud/docker/daemon/execdriver/native/configuration"
"github.com/dotcloud/docker/daemon/execdriver/native/template"
"github.com/dotcloud/docker/pkg/apparmor"
"github.com/dotcloud/docker/pkg/libcontainer"
"github.com/dotcloud/docker/runtime/execdriver"
"github.com/dotcloud/docker/runtime/execdriver/native/configuration"
"github.com/dotcloud/docker/runtime/execdriver/native/template"
)
// createContainer populates and configures the container type with the
@@ -24,6 +25,7 @@ func (d *driver) createContainer(c *execdriver.Command) (*libcontainer.Container
container.Cgroups.Name = c.ID
// check to see if we are running in ramdisk to disable pivot root
container.NoPivotRoot = os.Getenv("DOCKER_RAMDISK") != ""
container.Context["restrictions"] = "true"
if err := d.createNetwork(container, c); err != nil {
return nil, err
@@ -32,6 +34,8 @@ func (d *driver) createContainer(c *execdriver.Command) (*libcontainer.Container
if err := d.setPrivileged(container); err != nil {
return nil, err
}
} else {
container.Mounts = append(container.Mounts, libcontainer.Mount{Type: "devtmpfs"})
}
if err := d.setupCgroups(container, c); err != nil {
return nil, err
@@ -49,6 +53,10 @@ func (d *driver) createContainer(c *execdriver.Command) (*libcontainer.Container
}
func (d *driver) createNetwork(container *libcontainer.Container, c *execdriver.Command) error {
if c.Network.HostNetworking {
container.Namespaces["NEWNET"] = false
return nil
}
container.Networks = []*libcontainer.Network{
{
Mtu: c.Network.Mtu,
@@ -72,15 +80,34 @@ func (d *driver) createNetwork(container *libcontainer.Container, c *execdriver.
}
container.Networks = append(container.Networks, &vethNetwork)
}
if c.Network.ContainerID != "" {
cmd := d.activeContainers[c.Network.ContainerID]
if cmd == nil || cmd.Process == nil {
return fmt.Errorf("%s is not a valid running container to join", c.Network.ContainerID)
}
nspath := filepath.Join("/proc", fmt.Sprint(cmd.Process.Pid), "ns", "net")
container.Networks = append(container.Networks, &libcontainer.Network{
Type: "netns",
Context: libcontainer.Context{
"nspath": nspath,
},
})
}
return nil
}
func (d *driver) setPrivileged(container *libcontainer.Container) error {
for _, c := range container.CapabilitiesMask {
c.Enabled = true
for key := range container.CapabilitiesMask {
container.CapabilitiesMask[key] = true
}
container.Cgroups.DeviceAccess = true
container.Context["apparmor_profile"] = "unconfined"
delete(container.Context, "restrictions")
if apparmor.IsEnabled() {
container.Context["apparmor_profile"] = "unconfined"
}
return nil
}
@@ -88,6 +115,7 @@ func (d *driver) setupCgroups(container *libcontainer.Container, c *execdriver.C
if c.Resources != nil {
container.Cgroups.CpuShares = c.Resources.CpuShares
container.Cgroups.Memory = c.Resources.Memory
container.Cgroups.MemoryReservation = c.Resources.Memory
container.Cgroups.MemorySwap = c.Resources.MemorySwap
}
return nil
@@ -95,20 +123,19 @@ func (d *driver) setupCgroups(container *libcontainer.Container, c *execdriver.C
func (d *driver) setupMounts(container *libcontainer.Container, c *execdriver.Command) error {
for _, m := range c.Mounts {
container.Mounts = append(container.Mounts, libcontainer.Mount{m.Source, m.Destination, m.Writable, m.Private})
container.Mounts = append(container.Mounts, libcontainer.Mount{
Type: "bind",
Source: m.Source,
Destination: m.Destination,
Writable: m.Writable,
Private: m.Private,
})
}
return nil
}
func (d *driver) setupLabels(container *libcontainer.Container, c *execdriver.Command) error {
labels := c.Config["label"]
if len(labels) > 0 {
process, mount, err := label.GenLabels(labels[0])
if err != nil {
return err
}
container.Context["mount_label"] = mount
container.Context["process_label"] = process
}
container.Context["process_label"] = c.Config["process_label"][0]
container.Context["mount_label"] = c.Config["mount_label"][0]
return nil
}
@@ -3,35 +3,31 @@ package native
import (
"encoding/json"
"fmt"
"github.com/dotcloud/docker/pkg/cgroups"
"github.com/dotcloud/docker/pkg/libcontainer"
"github.com/dotcloud/docker/pkg/libcontainer/apparmor"
"github.com/dotcloud/docker/pkg/libcontainer/nsinit"
"github.com/dotcloud/docker/pkg/system"
"github.com/dotcloud/docker/runtime/execdriver"
"io"
"io/ioutil"
"log"
"os"
"os/exec"
"path/filepath"
"strconv"
"strings"
"syscall"
"github.com/dotcloud/docker/daemon/execdriver"
"github.com/dotcloud/docker/pkg/apparmor"
"github.com/dotcloud/docker/pkg/cgroups"
"github.com/dotcloud/docker/pkg/libcontainer"
"github.com/dotcloud/docker/pkg/libcontainer/nsinit"
"github.com/dotcloud/docker/pkg/system"
)
const (
DriverName = "native"
Version = "0.1"
Version = "0.2"
BackupApparmorProfilePath = "apparmor/docker.back" // relative to docker root
)
func init() {
execdriver.RegisterInitFunc(DriverName, func(args *execdriver.InitArgs) error {
var (
container *libcontainer.Container
ns = nsinit.NewNsInit(&nsinit.DefaultCommandFactory{}, &nsinit.DefaultStateWriter{args.Root}, createLogger(""))
)
var container *libcontainer.Container
f, err := os.Open(filepath.Join(args.Root, "container.json"))
if err != nil {
return err
@@ -42,7 +38,7 @@ func init() {
}
f.Close()
cwd, err := os.Getwd()
rootfs, err := os.Getwd()
if err != nil {
return err
}
@@ -50,7 +46,7 @@ func init() {
if err != nil {
return err
}
if err := ns.Init(container, cwd, args.Console, syncPipe, args.Args); err != nil {
if err := nsinit.Init(container, rootfs, args.Console, syncPipe, args.Args); err != nil {
return err
}
return nil
@@ -87,35 +83,49 @@ func (d *driver) Run(c *execdriver.Command, pipes *execdriver.Pipes, startCallba
d.activeContainers[c.ID] = &c.Cmd
var (
term nsinit.Terminal
factory = &dockerCommandFactory{c: c, driver: d}
stateWriter = &dockerStateWriter{
callback: startCallback,
c: c,
dsw: &nsinit.DefaultStateWriter{filepath.Join(d.root, c.ID)},
}
ns = nsinit.NewNsInit(factory, stateWriter, createLogger(os.Getenv("DEBUG")))
args = append([]string{c.Entrypoint}, c.Arguments...)
dataPath = filepath.Join(d.root, c.ID)
args = append([]string{c.Entrypoint}, c.Arguments...)
)
if err := d.createContainerRoot(c.ID); err != nil {
return -1, err
}
defer d.removeContainerRoot(c.ID)
if c.Tty {
term = &dockerTtyTerm{
pipes: pipes,
}
} else {
term = &dockerStdTerm{
pipes: pipes,
}
}
c.Terminal = term
if err := d.writeContainerFile(container, c.ID); err != nil {
return -1, err
}
return ns.Exec(container, term, args)
term := getTerminal(c, pipes)
return nsinit.Exec(container, term, c.Rootfs, dataPath, args, func(container *libcontainer.Container, console, rootfs, dataPath, init string, child *os.File, args []string) *exec.Cmd {
// we need to join the rootfs because nsinit will setup the rootfs and chroot
initPath := filepath.Join(c.Rootfs, c.InitPath)
c.Path = d.initPath
c.Args = append([]string{
initPath,
"-driver", DriverName,
"-console", console,
"-pipe", "3",
"-root", filepath.Join(d.root, c.ID),
"--",
}, args...)
// set this to nil so that when we set the clone flags anything else is reset
c.SysProcAttr = nil
system.SetCloneFlags(&c.Cmd, uintptr(nsinit.GetNamespaceFlags(container.Namespaces)))
c.ExtraFiles = []*os.File{child}
c.Env = container.Env
c.Dir = c.Rootfs
return &c.Cmd
}, func() {
if startCallback != nil {
c.ContainerPid = c.Process.Pid
startCallback(c)
}
})
}
func (d *driver) Kill(p *execdriver.Command, sig int) error {
@@ -228,65 +238,17 @@ func getEnv(key string, env []string) string {
return ""
}
type dockerCommandFactory struct {
c *execdriver.Command
driver *driver
}
// createCommand will return an exec.Cmd with the Cloneflags set to the proper namespaces
// defined on the container's configuration and use the current binary as the init with the
// args provided
func (d *dockerCommandFactory) Create(container *libcontainer.Container, console string, syncFile *os.File, args []string) *exec.Cmd {
// we need to join the rootfs because nsinit will setup the rootfs and chroot
initPath := filepath.Join(d.c.Rootfs, d.c.InitPath)
d.c.Path = d.driver.initPath
d.c.Args = append([]string{
initPath,
"-driver", DriverName,
"-console", console,
"-pipe", "3",
"-root", filepath.Join(d.driver.root, d.c.ID),
"--",
}, args...)
// set this to nil so that when we set the clone flags anything else is reset
d.c.SysProcAttr = nil
system.SetCloneFlags(&d.c.Cmd, uintptr(nsinit.GetNamespaceFlags(container.Namespaces)))
d.c.ExtraFiles = []*os.File{syncFile}
d.c.Env = container.Env
d.c.Dir = d.c.Rootfs
return &d.c.Cmd
}
type dockerStateWriter struct {
dsw nsinit.StateWriter
c *execdriver.Command
callback execdriver.StartCallback
}
func (d *dockerStateWriter) WritePid(pid int, started string) error {
d.c.ContainerPid = pid
err := d.dsw.WritePid(pid, started)
if d.callback != nil {
d.callback(d.c)
}
return err
}
func (d *dockerStateWriter) DeletePid() error {
return d.dsw.DeletePid()
}
func createLogger(debug string) *log.Logger {
var w io.Writer
// if we are in debug mode set the logger to stderr
if debug != "" {
w = os.Stderr
func getTerminal(c *execdriver.Command, pipes *execdriver.Pipes) nsinit.Terminal {
var term nsinit.Terminal
if c.Tty {
term = &dockerTtyTerm{
pipes: pipes,
}
} else {
w = ioutil.Discard
term = &dockerStdTerm{
pipes: pipes,
}
}
return log.New(w, "[libcontainer] ", log.LstdFlags)
c.Terminal = term
return term
}
@@ -0,0 +1,47 @@
package template
import (
"github.com/dotcloud/docker/pkg/apparmor"
"github.com/dotcloud/docker/pkg/cgroups"
"github.com/dotcloud/docker/pkg/libcontainer"
)
// New returns the docker default configuration for libcontainer
func New() *libcontainer.Container {
container := &libcontainer.Container{
CapabilitiesMask: map[string]bool{
"SETPCAP": false,
"SYS_MODULE": false,
"SYS_RAWIO": false,
"SYS_PACCT": false,
"SYS_ADMIN": false,
"SYS_NICE": false,
"SYS_RESOURCE": false,
"SYS_TIME": false,
"SYS_TTY_CONFIG": false,
"AUDIT_WRITE": false,
"AUDIT_CONTROL": false,
"MAC_OVERRIDE": false,
"MAC_ADMIN": false,
"NET_ADMIN": false,
"MKNOD": true,
"SYSLOG": false,
},
Namespaces: map[string]bool{
"NEWNS": true,
"NEWUTS": true,
"NEWIPC": true,
"NEWPID": true,
"NEWNET": true,
},
Cgroups: &cgroups.Cgroup{
Parent: "docker",
DeviceAccess: false,
},
Context: libcontainer.Context{},
}
if apparmor.IsEnabled() {
container.Context["apparmor_profile"] = "docker-default"
}
return container
}
@@ -5,7 +5,7 @@
package native
import (
"github.com/dotcloud/docker/runtime/execdriver"
"github.com/dotcloud/docker/daemon/execdriver"
"io"
"os"
"os/exec"

Some files were not shown because too many files have changed in this diff Show More