Commit Graph

21080 Commits

Author SHA1 Message Date
8b2b861995 Add CONFIG_KEYS to check-config.sh
We need this after opencontainers/runc#488

Signed-off-by: Alexander Morozov <lk4d4@docker.com>
Upstream-commit: c1996c92455718e65a6211183e244a1e0ff803fe
Component: engine
2016-02-26 23:40:35 -08:00
8135f8d68c Merge pull request #20699 from calavera/remove_static_error_declarations
Remove static errors from errors package.
Upstream-commit: df2b74188ec51422e84ec1dbdc58abf08c215019
Component: engine
2016-02-26 16:30:12 -08:00
a36a788004 Merge pull request #20672 from justincormack/personality
Add some uses of personality syscall to default seccomp filter
Upstream-commit: f666d918fca8ad82423443b0f01528b94990b0bc
Component: engine
2016-02-26 14:27:23 -08:00
e827c116e4 Merge pull request #20636 from anusha-ragunathan/apt-ftparchive
Always create apt-ftparchive.conf.
Upstream-commit: 5bfaab984c94665ff6be80aefc434efc50c07667
Component: engine
2016-02-26 14:12:06 -08:00
7c97092faa Merge pull request #20275 from cpuguy83/finer_graph_locks
Finer graph locks
Upstream-commit: 2f797bb1d9826f1aba242965b611b71b81fd152e
Component: engine
2016-02-26 13:33:34 -08:00
e0b6d7e1f3 Merge pull request #20729 from estesp/pipework
Add synchronization and closure to IO pipes in userns path
Upstream-commit: 51302c29edf256276ba4ba9a20076866db522f66
Component: engine
2016-02-26 13:33:02 -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
7b1eb1255a Merge pull request #20725 from runcom/fix-subid-files-parsing
pkg: idtools: fix subid files parsing
Upstream-commit: b2a15a222626be8b70820a37c910614387b43575
Component: engine
2016-02-26 21:28:08 +01:00
5e9f05d546 Add synchronization and closure to IO pipes in userns path
The execdriver pipes setup uses OS pipes with fds so that they can be
chown'ed to the remapped root user for proper access. Recent flakiness
in certain short-lived tests (usually via the "exec" path) reveals that
the copy routines are not completing before exit/tear-down.

This fix adds synchronization and proper closure such that these
routines exit successfully.

Docker-DCO-1.1-Signed-off-by: Phil Estes <estesp@linux.vnet.ibm.com> (github: estesp)
Upstream-commit: 995386735c2fe47ebb144f95adbc8eb1341ac48b
Component: engine
2016-02-26 13:47:34 -05:00
3edfa94729 Add some uses of personality syscall to default seccomp filter
We generally want to filter the personality(2) syscall, as it
allows disabling ASLR, and turning on some poorly supported
emulations that have been the target of CVEs. However the use
cases for reading the current value, setting the default
PER_LINUX personality, and setting PER_LINUX32 for 32 bit
emulation are fine.

See issue #20634

Signed-off-by: Justin Cormack <justin.cormack@docker.com>
Upstream-commit: 39b799ac53e2ba397edc3063432d01478416dbc8
Component: engine
2016-02-26 18:43:08 +01:00
be189c5bc1 Merge pull request #20703 from riyazdf/notary-v0.2.0-vendor
Vendor in notary v0.2.0
Upstream-commit: e330d0749ce2d137249f290a4d20b0997279dbec
Component: engine
2016-02-26 08:53:07 -08:00
03ce1316a5 Merge pull request #20428 from jfrazelle/generate-conversion
generate seccomp profile convert type
Upstream-commit: c47674efda39226e7323e5668ee279927997fb4f
Component: engine
2016-02-26 10:28:23 -05:00
8491fb072b pkg: idtools: fix subid files parsing
Since Docker is already skipping newlines in /etc/sub{uid,gid},
this patch skips commented out lines - otherwise Docker fails to start.
Add unit test also.

Signed-off-by: Antonio Murdaca <runcom@redhat.com>
Upstream-commit: bf04d68db2b808a40fa24ac2bfa86c8af22d5f11
Component: engine
2016-02-26 15:42:05 +01:00
ae16b13956 Merge pull request #20515 from raesene/patch-1
Update security.md with basic User Namespace info.
Upstream-commit: 9792308b840c017f5772cee026f9537b2efe33f1
Component: engine
2016-02-26 14:02:46 +01:00
7adb67365b remove leftover Ubuntu 15.04 from install docs
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Upstream-commit: 1ca064cb62a88366bc13af67a112aff8992b6b68
Component: engine
2016-02-26 13:00:27 +01:00
2099e9bf10 bumping miekg/pkcs11 dependency for go1.6
Signed-off-by: Riyaz Faizullabhoy <riyaz.faizullabhoy@docker.com>
Upstream-commit: 0bb1acee3778009d775b81525f64796d9ea62a21
Component: engine
2016-02-25 21:29:37 -08:00
5bfa2d9a1f Merge pull request #20655 from hqhq/hq_fix_update_memoryswap
Fix problems when update swap memory
Upstream-commit: 6748cc10ac280950103d88a249f7d443715cf833
Component: engine
2016-02-25 22:28:53 -05:00
623b2b65cf Merge pull request #20263 from Microsoft/jjh/testunit-fileutils
Windows CI: Fixes panic in test-unit for FileUtils
Upstream-commit: 6c35350baba816f99bd8236b4b463bbb8d61e25d
Component: engine
2016-02-25 17:35:32 -08:00
8f26d8491f Merge pull request #20481 from HackToday/addcheckfd
Add check for non-systemd fd use case
Upstream-commit: dd53ab14e4adb3d54fbd102dcce6bc476e5b3310
Component: engine
2016-02-25 16:38:53 -08:00
eadd157313 Merge pull request #20580 from BrianBland/crossRepoPushRetry
Improve auth fallback behavior for cross-repository push
Upstream-commit: d8b6e62f50c1ca40903b89a789b0a1806013a5b8
Component: engine
2016-02-25 16:37:04 -08:00
2bc21a41ec Merge pull request #20673 from Microsoft/jjh/testkill
Windows CI: Port TestKill*
Upstream-commit: 5cb4693300114436ac62697b0dff35c0f5bce9aa
Component: engine
2016-02-26 01:11:51 +01:00
ac8b4b9a6a Add finer-grained locking for aufs
```
benchmark                       old ns/op       new ns/op     delta
BenchmarkConcurrentAccess-8     10269529748     26834747      -99.74%

benchmark                       old allocs     new allocs     delta
BenchmarkConcurrentAccess-8     309948         7232           -97.67%

benchmark                       old bytes     new bytes     delta
BenchmarkConcurrentAccess-8     23943576      1578441       -93.41%
```

Signed-off-by: Brian Goff <cpuguy83@gmail.com>
Upstream-commit: f31014197cbe9438cc956ed12c47093a0324c82d
Component: engine
2016-02-25 18:06:41 -05:00
534b2f0779 Vendor in notary v0.2.0
Signed-off-by: Riyaz Faizullabhoy <riyaz.faizullabhoy@docker.com>
Upstream-commit: 84dc2d9e70f1ad4422732421e2d6b91274f4dfae
Component: engine
2016-02-25 13:40:00 -08:00
aa1fcfa3ec Merge pull request #20697 from tiborvass/tls-remote-daemon-tests
Support TLS remote test daemon
Upstream-commit: 6fa5576e308d4c99e9a818f924483536a773afba
Component: engine
2016-02-25 16:16:40 -05:00
2e2994147a Merge pull request #20663 from calavera/standalone_middlewares
Make server middleware standalone functions.
Upstream-commit: 2b819b76df64375c711279827e61c1f0a06d08c6
Component: engine
2016-02-25 15:01:07 -05:00
085a86e475 Fix some issues with concurrency in aufs.
Adds a benchmark to measure performance under concurrent actions.

Signed-off-by: Brian Goff <cpuguy83@gmail.com>
Upstream-commit: 55c91f2ab9bcd48cfa248a4e842bb78257c14134
Component: engine
2016-02-25 14:32:13 -05:00
cfd2e7e48d Support TLS remote test daemon
This will allow us to have a windows-to-linux CI, where the linux host
can be anywhere, connecting with TLS.

Signed-off-by: Tibor Vass <tibor@docker.com>
Upstream-commit: f4a1e3db998816e5fcb0df56c29519c488890464
Component: engine
2016-02-25 14:12:17 -05:00
c41d1f589c Merge pull request #20633 from crosbymichael/unit-file
Add "Delegate=yes" to docker's service file
Upstream-commit: 6582013207fd7eb7f31b26ecb2516eafb27479a1
Component: engine
2016-02-25 10:47:46 -08:00
48da675c58 Add "Delegate=yes" to docker's service file
We need to add delegate yes to docker's service file so that it can
manage the cgroups of the processes that it launches without systemd
interfering with them and moving the processes after it is reloaded.

```
       Delegate=
           Turns on delegation of further resource control partitioning to
           processes of the unit. For unprivileged services (i.e. those
           using the User= setting), this allows processes to create a
           subhierarchy beneath its control group path. For privileged
           services and scopes, this ensures the processes will have all
           control group controllers enabled.
```

This is the proper fix for issue #20152

Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
Upstream-commit: d16737f971092767c1b9d28302a3f5aedbe2f576
Component: engine
2016-02-25 10:32:09 -08:00
3c9125646e Merge pull request #20681 from icecrime/aaronl_maintainer
Add @aaronlehmann to maintainers
Upstream-commit: 60e2d5e0b03e5f15cf8f6249ba47e824678e54d8
Component: engine
2016-02-25 09:18:28 -08:00
d0fa8c5e37 Merge pull request #20572 from runcom/sudo-user
resolve the config file from the sudo user
Upstream-commit: 61d24e769d9f7a075f6881ba8b4523d5db9dcd6d
Component: engine
2016-02-25 16:05:25 +01:00
1f47465496 Fix TestExecApiStartWithDetach on WindowsTP4
Signed-off-by: Vincent Demeester <vincent@sbr.pm>
Upstream-commit: 21c85111231caeb6d2d342f13999d706cc33ff6a
Component: engine
2016-02-25 14:27:22 +01:00
8bd4c1506d docs: simplify some steps of the overlay network guide
Instead of using a process expansion to feed the right arguments to
docker to run on "mh-keystore", just moves up the next step which makes
"mh-keystore" the default target. This makes the guide a bit shorter and
easier to understand.

Signed-off-by: Vincent Bernat <vincent@bernat.im>
Upstream-commit: db5ded0dfc28c71276acf8500fabe3c64c15fbe1
Component: engine
2016-02-25 13:17:26 +01:00
5cbdc71804 Merge pull request #20679 from Microsoft/jjh/testrestart
Windows CI: Port docker_cli_restart_test.go
Upstream-commit: 7cf03700f891f0863f11ee57c2d3f8d68350d91b
Component: engine
2016-02-25 10:17:25 +01:00
5f817c4ab4 Merge pull request #20685 from estesp/userns-dev-fuse-fix
Filter auto-created device list if user namespaces enabled
Upstream-commit: 13b6733ee82f1e3f8749dccf345a0874382b0d8e
Component: engine
2016-02-25 10:01:13 +01:00
0d4eea62f0 Merge pull request #20687 from CWSpear/patch-1
Add the Local Persist plugin to docs
Upstream-commit: 4c014296a16d030674175f407df8a39e9aa3ae29
Component: engine
2016-02-25 09:39:07 +01:00
6395a43374 Merge pull request #20677 from Microsoft/jjh/testclilogs
Windows CI: Port docker_cli_logs_test.go
Upstream-commit: ca7ce05e819959def59f8e3c07fdf03cbdcc0770
Component: engine
2016-02-25 09:38:23 +01:00
81c0ade270 Merge pull request #20682 from cpuguy83/fix_volplugin_panics
Fix panic when plugin responds with null volume
Upstream-commit: 0ad04242b4a7f98b691573f9095330ba9e74ae3b
Component: engine
2016-02-25 09:32:54 +01:00
bd2ade864c Merge pull request #20674 from Microsoft/jjh/testlogsapi
Windows CI: Port TestLogsAPI*
Upstream-commit: 9f1ad7850c03f75f9e69a8f3f76290533363ea7a
Component: engine
2016-02-25 09:11:15 +01:00
b0bf4b7771 Merge pull request #20680 from cpuguy83/close_plugin_req_body_on_error
Close resp body on plugin call error
Upstream-commit: a13945dd169b8ec83a3f17103a47ce124c024c03
Component: engine
2016-02-25 09:10:17 +01:00
ca8a5e468f Merge pull request #20664 from Microsoft/jjh/busyboxtop
Windows CI: Integrity check for busybox top
Upstream-commit: abfc480f4be9a62c16e6af26160de8b80c805e51
Component: engine
2016-02-25 09:09:37 +01:00
0bf1e6c66b Merge pull request #20683 from zhangjianfnst/fix-flaws-in-man
Fix some flaws in man.
Upstream-commit: 3f7c078aab164e708888f5292cb72754551ecd75
Component: engine
2016-02-25 09:01:32 +01:00
a9426d8ed7 Merge pull request #20671 from nakulpathak3/readme-extension
Add .md extension to readme for markdown rendering
Upstream-commit: 46c0c5e86b125556563709c5597ff97a966e7b4f
Component: engine
2016-02-25 08:40:00 +01:00
ae2cbbdd21 Add the Local Persist plugin
I wasn't 100% sure if it was appropriate to add plugin here, but @thaJeztah invited me to do so, so here it is!

(see https://github.com/CWSpear/local-persist/issues/17#issuecomment-188523784)

Signed-off-by: Cameron Spear <cameronspear@gmail.com>
Upstream-commit: cc085be7cc19d2d1aed39c243b6990a7d04ee639
Component: engine
2016-02-24 23:29:58 -08:00
3a1a7f86d5 Filter auto-created device list if user namespaces enabled
Because devices will be bind-mounted instead of using `mknod`, we need
to make sure the source exists and filter the list by only those whose
source is a valid path/current device entry.

Docker-DCO-1.1-Signed-off-by: Phil Estes <estesp@linux.vnet.ibm.com> (github: estesp)
Upstream-commit: 9a554e8c37d522ed791b3bb55f9ba9f21e2ac76a
Component: engine
2016-02-25 00:11:36 -05:00
b417dc79d3 Windows CI: Port docker_cli_logs_test.go
Signed-off-by: John Howard <jhoward@microsoft.com>
Upstream-commit: 10bd587d77eff327cfb0dff2add4688a183c41a3
Component: engine
2016-02-24 20:19:48 -08:00
4d716f809c Merge pull request #20647 from coolljt0725/fix_20638
Fix exec start api with detach and AttachStdin at same time. fixes #2…
Upstream-commit: cee4ff1c4ac0bb47ed847f3bb725fd6233613937
Component: engine
2016-02-24 20:17:15 -08:00
acc7d09962 Improve fallback behavior for cross-repository push
Attempt layer mounts from up to 3 source repositories, possibly
falling back to a standard blob upload for cross repository pushes.
Addresses compatiblity issues with token servers which do not grant
multiple repository scopes, resulting in an authentication failure for
layer mounts, which would otherwise cause the push to terminate with an
error.

Signed-off-by: Brian Bland <brian.bland@docker.com>
Upstream-commit: 1d3480f9ba3525309030497d5c8a3dd5725ed15a
Component: engine
2016-02-24 19:13:35 -08:00
d1a3bc5db1 Fix exec start api with detach and AttachStdin at same time. fixes #20638
Signed-off-by: Lei Jitang <leijitang@huawei.com>
Upstream-commit: fb0ac1afd97e6e3bf3c13dcda5821f36b56cc62b
Component: engine
2016-02-24 21:04:44 -05:00
303d142eb8 Fix some flaws in man.
Signed-off-by: Jian Zhang <zhangjian.fnst@cn.fujitsu.com>
Upstream-commit: 877e6d76a4f16a1825a1e98cbfa9f5fef7a60c59
Component: engine
2016-02-25 09:48:21 +08:00