Commit Graph

1019 Commits

Author SHA1 Message Date
87c76eb0d7 Pass upstream client's user agent through to registry on operations beyond pulls
This adds support for the passthrough on build, push, login, and search.

Revamp the integration test to cover these cases and make it more
robust.

Use backticks instead of quoted strings for backslash-heavy string
contstands.

Signed-off-by: Aaron Lehmann <aaron.lehmann@docker.com>
Upstream-commit: c44e7a3e632c3ea961cb8c12ba45371f54e6699c
Component: engine
2016-03-21 14:31:47 -07:00
6c1d291a31 Merge pull request #21306 from mgoelzer/issue20001-nodeps
Pass upstream client's user agent through to registry on image pulls
Upstream-commit: 278d3962a8cb6a42e9841789bdb8b49a29617e24
Component: engine
2016-03-21 14:26:59 -07:00
5fe3bfd34f Merge pull request #21333 from cpuguy83/sigpipe
Don't forward SIGPIPE from client to container
Upstream-commit: 5008a34072e55f7df87774a5e7beca979718c3c2
Component: engine
2016-03-21 15:09:13 +01:00
76875b2808 Add the name of the exe that's trying to be executed
so that the user knows what's not in the container but should be.
Its not always easy for the user to know what exact command is being run
when the 'docker run' is embedded deep in something else, like a Makefile.
Saw this while dealing with the containerd migration.

Signed-off-by: Doug Davis <dug@us.ibm.com>
Upstream-commit: 79421606388169151c31d1c34079a98f53170ab8
Component: engine
2016-03-20 18:15:46 -07:00
6143e6c8cf Pass upstream client's user agent through to registry on image pulls
Changes how the Engine interacts with Registry servers on image pull.
Previously, Engine sent a User-Agent string to the Registry server
that included only the Engine's version information.  This commit
appends to that string the fields from the User-Agent sent by the
client (e.g., Compose) of the Engine.  This allows Registry server
operators to understand what tools are actually generating pulls on
their registries.

Signed-off-by: Mike Goelzer <mgoelzer@docker.com>
Upstream-commit: d1502afb63a10df0bfce20ae2957774cfb3e58d8
Component: engine
2016-03-20 04:30:09 -07:00
c955c9e289 Don't forward SIGPIPE from client to container
Signed-off-by: Brian Goff <cpuguy83@gmail.com>
Upstream-commit: 81707de23ff6d0b03bd8d5cda87efac7939d9d46
Component: engine
2016-03-18 16:50:18 -04:00
8ba16d91c8 Replace execdrivers with containerd implementation
Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
Signed-off-by: Kenfe-Mickael Laventure <mickael.laventure@gmail.com>
Signed-off-by: Anusha Ragunathan <anusha@docker.com>
Upstream-commit: 9c4570a958df42d1ad19364b1a8da55b891d850a
Component: engine
2016-03-18 13:38:32 -07:00
0477d61856 Fix inspect to print bind mounts source path instead of an empty string
Signed-off-by: Kenfe-Mickael Laventure <mickael.laventure@gmail.com>
Upstream-commit: cb8cc56c225cfc74b81f22a0f2ca8ce7bdccfe04
Component: engine
2016-03-17 15:42:45 -07:00
d72402c2b3 Merge pull request #21273 from jfrazelle/remove-dead-code
remove dead code
Upstream-commit: 04c7d94c710bdb6c8378bdf896fd67455ba23199
Component: engine
2016-03-17 09:16:02 -07:00
3836e556a4 Merge pull request #21258 from runcom/res.body.leaks
*: fix response body leaks
Upstream-commit: b1e9a5eaf1c8826b13fa502e5bce00a453ab4091
Component: engine
2016-03-16 19:20:10 -07:00
8366a6bcc0 remove dead code
Signed-off-by: Jessica Frazelle <acidburn@docker.com>
Upstream-commit: 8dd88afb5b5f8ce353c00bfc71edf8238f3a0452
Component: engine
2016-03-16 19:15:14 -07:00
44ad0dbdfd Update api/client file to use context
Signed-off-by: Vincent Demeester <vincent@sbr.pm>
Upstream-commit: 8567286ed65c8aca180b4590acf7d9ef61e15955
Component: engine
2016-03-16 20:25:09 +01:00
195d725261 *: fix response body leaks
Signed-off-by: Antonio Murdaca <runcom@redhat.com>
Upstream-commit: f0d83c4cdb49adb53fdaf4216a4395c23d5cc8e9
Component: engine
2016-03-16 17:15:42 +01:00
9694bed63e Merge pull request #21002 from tonistiigi/fix-id-noprefix
Fix docker run for 64 byte hex ID
Upstream-commit: df20b5cfd337bb3093fd87e278501fbca4480d54
Component: engine
2016-03-14 10:17:38 -07:00
83045d547d Merge pull request #20970 from dmcgowan/login-oauth
OAuth support for registries
Upstream-commit: b9361f02da25108af75238093959634e433d72a0
Component: engine
2016-03-14 15:49:44 +01:00
1f1351f12b client: stats: fill in stats info on client
This code was lost in a rebase in the PIDs cgroup merge, fix it so that
`docker stats` actually shows statistics from the PIDs cgroup.

Signed-off-by: Aleksa Sarai <asarai@suse.com>
Upstream-commit: 084241a37b5d3f680228e6bd6cb50f9d0507a365
Component: engine
2016-03-12 14:45:30 +11:00
7d0b608cf5 Fix docker run for 64 byte hex ID
Fixes #20972

Also makes sure there is no check to registry if
no image is found for the prefixed IDs.

Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
Upstream-commit: 16e4c4e481aca8d5a99d5a4760b5d27bf5bbb9fd
Component: engine
2016-03-11 10:02:47 -08:00
536ff97acf Merge pull request #20958 from calavera/basic_function_templates
Provide basic string manipulation functions for template executions.
Upstream-commit: 943ae26bc01913fefe415defc575ea10e24f6a2b
Component: engine
2016-03-10 08:08:32 -08:00
a66058a138 Provide basic string manupilation functions for template executions.
This change centralizes the template manipulation in a single package
and adds basic string functions to their execution.

Signed-off-by: David Calavera <david.calavera@gmail.com>
Upstream-commit: 8514880997bd1bc944769dcc41e52307bb01f7ff
Component: engine
2016-03-09 19:37:12 -05:00
62cafaa190 Add support for identity tokens in client credentials store
Update unit test and documentation to handle the new case where Username
is set to <token> to indicate an identity token is involved.

Change the "Password" field in communications with the credential helper
to "Secret" to make clear it has a more generic purpose.

Signed-off-by: Aaron Lehmann <aaron.lehmann@docker.com>
Upstream-commit: ba0aa5311aa27fe77166f03d8bcc0174e2985913
Component: engine
2016-03-09 13:47:57 -08:00
b42da7fcc3 Change Docker client to support OAuth-based flow for login
This mechanism exchanges basic auth credentials for an identity token.
The identity token is used going forward to request scoped-down tokens
to use for registry operations.

Signed-off-by: Aaron Lehmann <aaron.lehmann@docker.com>
Upstream-commit: a6d0c66b4c923cddeaea09f5b41ad353ea7a9b5f
Component: engine
2016-03-09 13:47:57 -08:00
8ca8fa6b76 Add support for identity token with token handler
Use token handler options for initialization.
Update auth endpoint to set identity token in response.
Update credential store to match distribution interface changes.

Signed-off-by: Derek McGowan <derek@mcgstyle.net> (github: dmcgowan)
Upstream-commit: e896d1d7c4459c4b357efdd780e9fb9dd9bc90e0
Component: engine
2016-03-09 13:47:57 -08:00
de84e87a00 pids limit support
update bash commpletion for pids limit

update check config for kernel

add docs for pids limit

add pids stats

add stats to docker client

Signed-off-by: Jessica Frazelle <acidburn@docker.com>
Upstream-commit: 69cf03700fed7bf5eb7fe00c9214737e21478e49
Component: engine
2016-03-08 07:55:01 -08:00
dfd9e32dcf Merge pull request #20803 from WeiZhang555/empty-stats-no-stream
Bug fix: stats --no-stream always print zero values
Upstream-commit: 160abfbeeaa20314d5d971061d3bad7aaf87e66c
Component: engine
2016-03-05 08:47:41 -05:00
b9d5da8192 Bug fix: stats --no-stream always print zero values
`docker stats --no-stream` always print zero values.

```
$ docker stats --no-stream
CONTAINER           CPU %               MEM USAGE / LIMIT   MEM %
NET I/O             BLOCK I/O
7f4ef234ca8c        0.00%               0 B / 0 B           0.00%
0 B / 0 B           0 B / 0 B
f05bd18819aa        0.00%               0 B / 0 B           0.00%
0 B / 0 B           0 B / 0 B

```

This commit will let docker client wait until it gets correct stat
data before print it on screen.

Signed-off-by: Zhang Wei <zhangwei555@huawei.com>
Upstream-commit: ea86c30a4acd53ef626d4c53aaf8f91134173948
Component: engine
2016-03-05 13:22:26 +08:00
41c1b3cb5a Merge pull request #20943 from vdemeester/20942-fix-containerPsContext
Fix #20942 TestContainerPsContext unit test
Upstream-commit: 44b56341d9d40a53ad8d5c2cc87e3c5b2b0f28f3
Component: engine
2016-03-04 16:49:47 +01:00
9892cd5446 Try to fix #20942 TestContainerPsContext unit test
Signed-off-by: Vincent Demeester <vincent@sbr.pm>
Upstream-commit: 2787072a65efac3dee0b5299322e4a7cfba51f04
Component: engine
2016-03-04 14:20:41 +01:00
3c99541c75 Merge pull request #20890 from riyazdf/notary-snapshot-remote
Rotate snapshot key to server when initializing new notary repos
Upstream-commit: 52d4fff0d7e958e191b1aa9faf2e132c1776c5e4
Component: engine
2016-03-03 08:45:06 -08:00
4dd14aa176 Merge pull request #20863 from thaJeztah/add-kernel-memory-warning
Add KernelMemory to "info" and show warning
Upstream-commit: 15e68dc8eefad6b5b125209438a04d1d443e5b26
Component: engine
2016-03-03 13:14:51 +01:00
3a79a75181 Rotate snapshot key to server when initializing new notary repos
Signed-off-by: Riyaz Faizullabhoy <riyaz.faizullabhoy@docker.com>
Upstream-commit: f75622e52acad0213b74c6210c73243d82c8f1be
Component: engine
2016-03-02 16:51:32 -08:00
ba183000bc Merge pull request #20824 from runcom/fix-creds-store
cliconfig: credentials: support getting all auths
Upstream-commit: f4cb5f4a32ecb8e6e860b505337331f213658a99
Component: engine
2016-03-02 16:37:57 -08:00
7f5a363deb Add KernelMemory to "info" and show warning
This change adds "KernelMemory" to the /info endpoint and
shows a warning if KernelMemory is not supported by the kernel.

This makes it more consistent with the other memory-limit
options.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: 747a486b4aac2ebbbb28bd713b9a4a929f89353b
Component: engine
2016-03-02 23:32:25 +01:00
576af48c09 Merge pull request #20388 from hqhq/hq_add_cgroup_driver_info
Add CgroupDriver to docker info
Upstream-commit: 508a17baba3c39496008fc5b5e3fe890b8a1b31b
Component: engine
2016-03-02 23:17:27 +01:00
1bcabe12e7 api: client: fix login/logout with creds store
Make sure credentials are removed from the store at logout (not only
in the config file). Remove not needed error check and auth erasing
at login (auths aren't stored anywhere at that point).
Add regression test.

Signed-off-by: Antonio Murdaca <runcom@redhat.com>
Upstream-commit: 0eccc3838e4aac5318e98dcbfbe2100e253462de
Component: engine
2016-03-02 17:51:50 +01:00
049d8d3bcf cliconfig: credentials: support getting all auths
docker build is broken because it sends to the daemon the full
cliconfig file which has only Email(s). This patch retrieves all auth
configs from the credentials store.

Signed-off-by: Antonio Murdaca <runcom@redhat.com>
Upstream-commit: 44152144ca766221e97fdaa5200fec3557a64f58
Component: engine
2016-03-02 17:48:56 +01:00
17d0f2d01e Add CgroupDriver to docker info
Fixes: #19539

Signed-off-by: Qiang Huang <h.huangqiang@huawei.com>
Upstream-commit: ca89c329b9f0748da74d08d02a47bc494e7965e2
Component: engine
2016-03-02 20:07:06 +08:00
cf6760a787 Remove some unused structs and fields
Signed-off-by: Alexander Morozov <lk4d4@docker.com>
Upstream-commit: 0a352e1a906fbf7592aa95d6327776236d13392a
Component: engine
2016-03-01 09:59:29 -08:00
afc4d63ffe Merge pull request #20565 from kencochrane/remove_email_on_login
Remove email address field from login
Upstream-commit: 2453262e7ba131fede74dbf31df41da9d2f36c34
Component: engine
2016-03-01 08:02:16 -08:00
2919d69a0c Remove email address field from login
This removes the email prompt when you use docker login, and also removes the ability to register via the docker cli. Docker login, will strictly be used for logging into a registry server.

Signed-off-by: Ken Cochrane <kencochrane@gmail.com>
Upstream-commit: aee260d4eb3aa0fc86ee5038010b7bbc24512ae5
Component: engine
2016-02-29 17:53:27 -08:00
5692b958f8 Merge pull request #20792 from cpuguy83/more_stats_client_cleanup
Fixes issue with stats on start event
Upstream-commit: 187a2fb40390f52a45e5b77c2ccc2d4609e354a9
Component: engine
2016-02-29 17:33:37 -08:00
aa8f3c4116 Fixes issue with stats on start event
In situations where a client is called like `docker stats` with no
arguments or flags, if a container which was already created but not
started yet is then subsequently started it will not be added to the
stats list as expected.

Also splits some of the stats helpers to a separate file from the stats
CLI which is already quite long.

Signed-off-by: Brian Goff <cpuguy83@gmail.com>
Upstream-commit: df95474885aeaaa77eeea4c4b31a92b58fc2a67c
Component: engine
2016-02-29 16:34:42 -05:00
2180969e3a Merge pull request #20107 from calavera/client_auth_store
Client credentials store.
Upstream-commit: 29ce086e38384c54f6f2d8f09578a75c4c9d9593
Component: engine
2016-02-29 22:31:34 +01:00
f3c9f69224 Merge pull request #20307 from HuKeping/trust
Refactor trust push
Upstream-commit: 1ba0358a10e6ad61832a47ac2f99dda7a7d57429
Component: engine
2016-02-29 11:12:09 -08:00
8a7585ce8e Client credentials store.
This change implements communication with an external credentials store,
ala git-credential-helper. The client falls back the plain text store,
what we're currently using, if there is no remote store configured.

It shells out to helper program when a credential store is
configured. Those programs can be implemented with any language as long as they
follow the convention to pass arguments and information.

There is an implementation for the OS X keychain in https://github.com/calavera/docker-credential-helpers.
That package also provides basic structure to create other helpers.

Signed-off-by: David Calavera <david.calavera@gmail.com>
Upstream-commit: cf721c23e715e545eccf8484e145c2d18d6a6a23
Component: engine
2016-02-29 13:01:31 -05:00
26d7a7de66 Fix client-side race in docker stats
Subscribe to events and monitor for new containers before the initial
listing of currently running containers.

This fixes a race where a new container could appear between the first
list call but before the client was subscribed to events, leading to a
container never appearing in the output of `docker stats`.

Signed-off-by: Arnaud Porterie <arnaud.porterie@docker.com>
Upstream-commit: 3041aa53efbbfddbc10a66027d973bd353e3b525
Component: engine
2016-02-28 18:44:23 -08:00
1063341f9e Messaging both succeed and failure about the signing
It would be good to add a clearer failure or succeed message.

Signed-off-by: Hu Keping <hukeping@huawei.com>
Upstream-commit: 1a6866273697361f33ec908f51cf0e071a36b69d
Component: engine
2016-02-27 15:46:41 +08:00
c1ea49044b Refactor trust push
Unlike the untrusted push without an explicit tag will push all
tags for that repo, the trusted push would expect an explicit tag.

So that the code that attempts to do smart logic around signing multiple
tags should be removed.

Signed-off-by: Hu Keping <hukeping@huawei.com>
Upstream-commit: 5dddf7e98e3296ddec07e104ea829bebdb15d98d
Component: engine
2016-02-27 15:46:35 +08:00
b2ac99b3fa Remove static errors from errors package.
Moving all strings to the errors package wasn't a good idea after all.

Our custom implementation of Go errors predates everything that's nice
and good about working with errors in Go. Take as an example what we
have to do to get an error message:

```go
func GetErrorMessage(err error) string {
	switch err.(type) {
	case errcode.Error:
		e, _ := err.(errcode.Error)
		return e.Message

	case errcode.ErrorCode:
		ec, _ := err.(errcode.ErrorCode)
		return ec.Message()

	default:
		return err.Error()
	}
}
```

This goes against every good practice for Go development. The language already provides a simple, intuitive and standard way to get error messages, that is calling the `Error()` method from an error. Reinventing the error interface is a mistake.

Our custom implementation also makes very hard to reason about errors, another nice thing about Go. I found several (>10) error declarations that we don't use anywhere. This is a clear sign about how little we know about the errors we return. I also found several error usages where the number of arguments was different than the parameters declared in the error, another clear example of how difficult is to reason about errors.

Moreover, our custom implementation didn't really make easier for people to return custom HTTP status code depending on the errors. Again, it's hard to reason about when to set custom codes and how. Take an example what we have to do to extract the message and status code from an error before returning a response from the API:

```go
	switch err.(type) {
	case errcode.ErrorCode:
		daError, _ := err.(errcode.ErrorCode)
		statusCode = daError.Descriptor().HTTPStatusCode
		errMsg = daError.Message()

	case errcode.Error:
		// For reference, if you're looking for a particular error
		// then you can do something like :
		//   import ( derr "github.com/docker/docker/errors" )
		//   if daError.ErrorCode() == derr.ErrorCodeNoSuchContainer { ... }

		daError, _ := err.(errcode.Error)
		statusCode = daError.ErrorCode().Descriptor().HTTPStatusCode
		errMsg = daError.Message

	default:
		// This part of will be removed once we've
		// converted everything over to use the errcode package

		// FIXME: this is brittle and should not be necessary.
		// If we need to differentiate between different possible error types,
		// we should create appropriate error types with clearly defined meaning
		errStr := strings.ToLower(err.Error())
		for keyword, status := range map[string]int{
			"not found":             http.StatusNotFound,
			"no such":               http.StatusNotFound,
			"bad parameter":         http.StatusBadRequest,
			"conflict":              http.StatusConflict,
			"impossible":            http.StatusNotAcceptable,
			"wrong login/password":  http.StatusUnauthorized,
			"hasn't been activated": http.StatusForbidden,
		} {
			if strings.Contains(errStr, keyword) {
				statusCode = status
				break
			}
		}
	}
```

You can notice two things in that code:

1. We have to explain how errors work, because our implementation goes against how easy to use Go errors are.
2. At no moment we arrived to remove that `switch` statement that was the original reason to use our custom implementation.

This change removes all our status errors from the errors package and puts them back in their specific contexts.
IT puts the messages back with their contexts. That way, we know right away when errors used and how to generate their messages.
It uses custom interfaces to reason about errors. Errors that need to response with a custom status code MUST implementent this simple interface:

```go
type errorWithStatus interface {
	HTTPErrorStatusCode() int
}
```

This interface is very straightforward to implement. It also preserves Go errors real behavior, getting the message is as simple as using the `Error()` method.

I included helper functions to generate errors that use custom status code in `errors/errors.go`.

By doing this, we remove the hard dependency we have eeverywhere to our custom errors package. Yes, you can use it as a helper to generate error, but it's still very easy to generate errors without it.

Please, read this fantastic blog post about errors in Go: http://dave.cheney.net/2014/12/24/inspecting-errors

Signed-off-by: David Calavera <david.calavera@gmail.com>
Upstream-commit: a793564b2591035aec5412fbcbcccf220c773a4c
Component: engine
2016-02-26 15:49:09 -05:00
34876f5fef Merge pull request #20017 from calavera/expose_volumes_in_ps
Add mounts to docker ps.
Upstream-commit: 034a1a8dfd17d89123bf0405f898e880575ed775
Component: engine
2016-02-24 11:08:21 +01:00
edf220176a Add mounts to docker ps.
- Allow to filter containers by volume with `--filter volume=name` and `filter volume=/dest`.
- Show their names in the list with the custom format `{{ .Mounts }}`.

Signed-off-by: David Calavera <david.calavera@gmail.com>
Upstream-commit: bd4fb00fb6241d35537b460a2d9f48256111ae7a
Component: engine
2016-02-23 12:10:24 -05:00