diff --git a/docker.spec b/docker.spec index 604570f..b3aab48 100644 --- a/docker.spec +++ b/docker.spec @@ -189,8 +189,10 @@ install -d %{buildroot}%{go_contribdir} install -d %{buildroot}%{_bindir} %ifarch %go_arches install -D -m755 bundles/%{version}/dynbinary/%{name}-%{version} %{buildroot}/%{_bindir}/%{name} +install -D -m755 bundles/%{version}/dynbinary/dockerinit-%{version} %{buildroot}/%{_prefix}/lib/docker/dockerinit %else install -D -m755 bundles/%{version}/dyngccgo/%{name}-%{version} %{buildroot}/%{_bindir}/%{name} +install -D -m755 bundles/%{version}/dyngccgo/dockerinit-%{version} %{buildroot}/%{_prefix}/lib/docker/dockerinit %endif install -d %{buildroot}/%{_prefix}/lib/docker install -Dd -m 0755 \ diff --git a/fix-docker-init.patch b/fix-docker-init.patch index d20346b..26a4899 100644 --- a/fix-docker-init.patch +++ b/fix-docker-init.patch @@ -8,3 +8,15 @@ diff -Naur a/hack/make/.dockerinit b/hack/make/.dockerinit +/usr/bin/strip -s $DEST/dockerinit-$VERSION # sha1 our new dockerinit to ensure separate docker and dockerinit always run in a perfect pair compiled for one another export DOCKER_INITSHA1=$($sha1sum "$DEST/dockerinit-$VERSION" | cut -d' ' -f1) +diff --git a/hack/make/.dockerinit-gccgo b/hack/make/.dockerinit-gccgo +index 3caa526..f272d29 100644 +--- a/hack/make/.dockerinit-gccgo ++++ b/hack/make/.dockerinit-gccgo +@@ -27,5 +27,6 @@ else + exit 1 + fi + ++/usr/bin/strip -s $DEST/dockerinit-$VERSION + # sha1 our new dockerinit to ensure separate docker and dockerinit always run in a perfect pair compiled for one another + export DOCKER_INITSHA1=$($sha1sum "$DEST/dockerinit-$VERSION" | cut -d' ' -f1) + diff --git a/remove_docker_init.patch b/remove_docker_init.patch deleted file mode 100644 index 523018e..0000000 --- a/remove_docker_init.patch +++ /dev/null @@ -1,1182 +0,0 @@ -From 4357ed4a7363a1032edf93cf03232953c805184f Mon Sep 17 00:00:00 2001 -From: Aleksa Sarai -Date: Wed, 20 Jan 2016 22:53:54 +1100 -Subject: [PATCH 1/3] *: purge dockerinit from source code - -dockerinit has been around for a very long time. It was originally used -as a way for us to do configuration for LXC containers once the -container had started. LXC is no longer supported, and /.dockerinit has -been dead code for quite a while. This removes all code and references -in code to dockerinit. - -Signed-off-by: Aleksa Sarai ---- - Dockerfile | 5 +- - Dockerfile.armhf | 3 +- - Dockerfile.gccgo | 3 +- - api/client/info.go | 2 - - container/container_unix.go | 4 -- - contrib/builder/rpm/generate.sh | 4 +- - daemon/container_operations_unix.go | 1 - - daemon/container_operations_windows.go | 1 - - daemon/daemon_unix.go | 4 +- - daemon/execdriver/driver.go | 1 - - daemon/info.go | 7 --- - dockerinit/dockerinit.go | 11 ---- - dockerversion/version_lib.go | 3 - - hack/.vendor-helpers.sh | 1 - - hack/make.sh | 1 - - hack/make/.build-deb/rules | 4 +- - hack/make/.build-rpm/docker-engine.spec | 10 --- - hack/make/.dockerinit | 33 ---------- - hack/make/.dockerinit-gccgo | 31 --------- - hack/make/.go-autogen | 9 +-- - hack/make/dynbinary | 10 --- - hack/make/dyngccgo | 10 --- - integration-cli/docker_cli_diff_test.go | 6 +- - pkg/mount/mountinfo_linux_test.go | 1 - - utils/utils.go | 107 -------------------------------- - 25 files changed, 13 insertions(+), 259 deletions(-) - delete mode 100644 dockerinit/dockerinit.go - delete mode 100644 hack/make/.dockerinit - delete mode 100644 hack/make/.dockerinit-gccgo - -diff --git a/Dockerfile b/Dockerfile -index 56da7fe..71d5017 100644 ---- a/Dockerfile -+++ b/Dockerfile -@@ -96,8 +96,7 @@ RUN set -x \ - ENV PATH /osxcross/target/bin:$PATH - - # install seccomp --# this can be changed to the ubuntu package libseccomp-dev if dockerinit is removed, --# we need libseccomp.a (which the package does not provide) for dockerinit -+# TODO: switch to libseccomp-dev since dockerinit is gone - ENV SECCOMP_VERSION 2.2.3 - RUN set -x \ - && export SECCOMP_PATH="$(mktemp -d)" \ -@@ -114,7 +113,7 @@ RUN set -x \ - - # Install Go - # IMPORTANT: If the version of Go is updated, the Windows to Linux CI machines --# will need updating, to avoid errors. Ping #docker-maintainers on IRC -+# will need updating, to avoid errors. Ping #docker-maintainers on IRC - # with a heads-up. - ENV GO_VERSION 1.5.3 - RUN curl -fsSL "https://storage.googleapis.com/golang/go${GO_VERSION}.linux-amd64.tar.gz" \ -diff --git a/Dockerfile.armhf b/Dockerfile.armhf -index 3239edb..1bef8ec 100644 ---- a/Dockerfile.armhf -+++ b/Dockerfile.armhf -@@ -111,8 +111,7 @@ RUN git clone https://github.com/golang/lint.git /go/src/github.com/golang/lint - && go install -v github.com/golang/lint/golint - - # install seccomp --# this can be changed to the ubuntu package libseccomp-dev if dockerinit is removed, --# we need libseccomp.a (which the package does not provide) for dockerinit -+# TODO: switch to libseccomp-dev since dockerinit is gone - ENV SECCOMP_VERSION 2.2.3 - RUN set -x \ - && export SECCOMP_PATH="$(mktemp -d)" \ -diff --git a/Dockerfile.gccgo b/Dockerfile.gccgo -index 6d184f0..856489d 100644 ---- a/Dockerfile.gccgo -+++ b/Dockerfile.gccgo -@@ -42,8 +42,7 @@ RUN cd /usr/local/lvm2 \ - # see https://git.fedorahosted.org/cgit/lvm2.git/tree/INSTALL - - # install seccomp --# this can be changed to the ubuntu package libseccomp-dev if dockerinit is removed, --# we need libseccomp.a (which the package does not provide) for dockerinit -+# TODO: switch to libseccomp-dev since dockerinit is gone - ENV SECCOMP_VERSION v2.2.3 - RUN set -x \ - && export SECCOMP_PATH=$(mktemp -d) \ -diff --git a/api/client/info.go b/api/client/info.go -index 42f0682..4c61633 100644 ---- a/api/client/info.go -+++ b/api/client/info.go -@@ -74,8 +74,6 @@ func (cli *DockerCli) CmdInfo(args ...string) error { - fmt.Fprintf(cli.out, " Goroutines: %d\n", info.NGoroutines) - fmt.Fprintf(cli.out, " System Time: %s\n", info.SystemTime) - fmt.Fprintf(cli.out, " EventsListeners: %d\n", info.NEventsListener) -- fmt.Fprintf(cli.out, " Init SHA1: %s\n", info.InitSha1) -- fmt.Fprintf(cli.out, " Init Path: %s\n", info.InitPath) - fmt.Fprintf(cli.out, " Docker Root Dir: %s\n", info.DockerRootDir) - } - -diff --git a/container/container_unix.go b/container/container_unix.go -index 9510a24..3db1444 100644 ---- a/container/container_unix.go -+++ b/container/container_unix.go -@@ -63,10 +63,6 @@ func (container *Container) CreateDaemonEnvironment(linkedEnv []string) []string - env := []string{ - "PATH=" + system.DefaultPathEnv, - "HOSTNAME=" + fullHostname, -- // Note: we don't set HOME here because it'll get autoset intelligently -- // based on the value of USER inside dockerinit, but only if it isn't -- // set already (ie, that can be overridden by setting HOME via -e or ENV -- // in a Dockerfile). - } - if container.Config.Tty { - env = append(env, "TERM=xterm") -diff --git a/contrib/builder/rpm/generate.sh b/contrib/builder/rpm/generate.sh -index 323502c..00749b0 100755 ---- a/contrib/builder/rpm/generate.sh -+++ b/contrib/builder/rpm/generate.sh -@@ -118,9 +118,7 @@ for version in "${versions[@]}"; do - - echo >> "$version/Dockerfile" - -- # fedora does not have a libseccomp.a for compiling static dockerinit -- # ONLY install libseccomp.a from source, this can be removed once dockerinit is removed -- # TODO remove this manual seccomp compilation once dockerinit is gone or no longer needs to be statically compiled -+ # TODO remove this since dockerinit is finally gone - case "$from" in - fedora:*) - awk '$1 == "ENV" && $2 == "SECCOMP_VERSION" { print; exit }' ../../../Dockerfile >> "$version/Dockerfile" -diff --git a/daemon/container_operations_unix.go b/daemon/container_operations_unix.go -index 0449613..8eaedcc 100644 ---- a/daemon/container_operations_unix.go -+++ b/daemon/container_operations_unix.go -@@ -254,7 +254,6 @@ func (daemon *Daemon) populateCommand(c *container.Container, env []string) erro - c.Command = &execdriver.Command{ - CommonCommand: execdriver.CommonCommand{ - ID: c.ID, -- InitPath: "/.dockerinit", - MountLabel: c.GetMountLabel(), - Network: en, - ProcessConfig: processConfig, -diff --git a/daemon/container_operations_windows.go b/daemon/container_operations_windows.go -index 23bc645..b812bfc 100644 ---- a/daemon/container_operations_windows.go -+++ b/daemon/container_operations_windows.go -@@ -124,7 +124,6 @@ func (daemon *Daemon) populateCommand(c *container.Container, env []string) erro - CommonCommand: execdriver.CommonCommand{ - ID: c.ID, - Rootfs: c.BaseFS, -- InitPath: "/.dockerinit", - WorkingDir: c.Config.WorkingDir, - Network: en, - MountLabel: c.GetMountLabel(), -diff --git a/daemon/daemon_unix.go b/daemon/daemon_unix.go -index 8f948e0..11dc7c7 100644 ---- a/daemon/daemon_unix.go -+++ b/daemon/daemon_unix.go -@@ -688,8 +688,7 @@ func initBridgeDriver(controller libnetwork.NetworkController, config *Config) e - } - - // setupInitLayer populates a directory with mountpoints suitable --// for bind-mounting dockerinit into the container. The mountpoint is simply an --// empty file at /.dockerinit -+// for bind-mounting things into the container. - // - // This extra layer is used by all containers as the top-most ro layer. It protects - // the container from unwanted side-effects on the rw layer. -@@ -699,7 +698,6 @@ func setupInitLayer(initLayer string, rootUID, rootGID int) error { - "/dev/shm": "dir", - "/proc": "dir", - "/sys": "dir", -- "/.dockerinit": "file", - "/.dockerenv": "file", - "/etc/resolv.conf": "file", - "/etc/hosts": "file", -diff --git a/daemon/execdriver/driver.go b/daemon/execdriver/driver.go -index 465e038..ba47b74 100644 ---- a/daemon/execdriver/driver.go -+++ b/daemon/execdriver/driver.go -@@ -131,7 +131,6 @@ type CommonProcessConfig struct { - type CommonCommand struct { - ContainerPid int `json:"container_pid"` // the pid for the process inside a container - ID string `json:"id"` -- InitPath string `json:"initpath"` // dockerinit - MountLabel string `json:"mount_label"` // TODO Windows. More involved, but can be factored out - Mounts []Mount `json:"mounts"` - Network *Network `json:"network"` -diff --git a/daemon/info.go b/daemon/info.go -index 008ac20..20d8356 100644 ---- a/daemon/info.go -+++ b/daemon/info.go -@@ -49,11 +49,6 @@ func (daemon *Daemon) SystemInfo() (*types.Info, error) { - logrus.Errorf("Could not read system memory info: %v", err) - } - -- // if we still have the original dockerinit binary from before -- // we copied it locally, let's return the path to that, since -- // that's more intuitive (the copied path is trivial to derive -- // by hand given VERSION) -- initPath := utils.DockerInitPath("") - sysInfo := sysinfo.New(true) - - var cRunning, cPaused, cStopped int32 -@@ -94,8 +89,6 @@ func (daemon *Daemon) SystemInfo() (*types.Info, error) { - OSType: platform.OSType, - Architecture: platform.Architecture, - RegistryConfig: daemon.RegistryService.Config, -- InitSha1: dockerversion.InitSHA1, -- InitPath: initPath, - NCPU: runtime.NumCPU(), - MemTotal: meminfo.MemTotal, - DockerRootDir: daemon.configStore.Root, -diff --git a/dockerinit/dockerinit.go b/dockerinit/dockerinit.go -deleted file mode 100644 -index 8a0be56..0000000 ---- a/dockerinit/dockerinit.go -+++ /dev/null -@@ -1,11 +0,0 @@ --package main -- --import ( -- _ "github.com/docker/docker/daemon/execdriver/native" -- "github.com/docker/docker/pkg/reexec" --) -- --func main() { -- // Running in init mode -- reexec.Init() --} -diff --git a/dockerversion/version_lib.go b/dockerversion/version_lib.go -index 1d5862d..6644bce 100644 ---- a/dockerversion/version_lib.go -+++ b/dockerversion/version_lib.go -@@ -9,8 +9,5 @@ const ( - GitCommit string = "library-import" - Version string = "library-import" - BuildTime string = "library-import" -- - IAmStatic string = "library-import" -- InitSHA1 string = "library-import" -- InitPath string = "library-import" - ) -diff --git a/hack/.vendor-helpers.sh b/hack/.vendor-helpers.sh -index e3be72b..fcc745c 100755 ---- a/hack/.vendor-helpers.sh -+++ b/hack/.vendor-helpers.sh -@@ -76,7 +76,6 @@ _dockerfile_env() { - clean() { - local packages=( - "${PROJECT}/docker" # package main -- "${PROJECT}/dockerinit" # package main - "${PROJECT}/integration-cli" # external tests - ) - local dockerPlatforms=( ${DOCKER_ENGINE_OSARCH:="linux/amd64"} $(_dockerfile_env DOCKER_CROSSPLATFORMS) ) -diff --git a/hack/make.sh b/hack/make.sh -index dc6cffa..6e007cc 100755 ---- a/hack/make.sh -+++ b/hack/make.sh -@@ -237,7 +237,6 @@ test_env() { - HOME="$ABS_DEST/fake-HOME" \ - PATH="$PATH" \ - TEMP="$TEMP" \ -- TEST_DOCKERINIT_PATH="$TEST_DOCKERINIT_PATH" \ - "$@" - } - -diff --git a/hack/make/.build-deb/rules b/hack/make/.build-deb/rules -index 2c7f6c4..8928215 100755 ---- a/hack/make/.build-deb/rules -+++ b/hack/make/.build-deb/rules -@@ -17,14 +17,12 @@ override_dh_auto_test: - ./bundles/$(VERSION)/dynbinary/docker -v - - override_dh_strip: -- # the SHA1 of dockerinit is important: don't strip it -- # also, Go has lots of problems with stripping, so just don't -+ # Go has lots of problems with stripping, so just don't - - override_dh_auto_install: - mkdir -p debian/docker-engine/usr/bin - cp -aT "$$(readlink -f bundles/$(VERSION)/dynbinary/docker)" debian/docker-engine/usr/bin/docker - mkdir -p debian/docker-engine/usr/lib/docker -- cp -aT "$$(readlink -f bundles/$(VERSION)/dynbinary/dockerinit)" debian/docker-engine/usr/lib/docker/dockerinit - - override_dh_installinit: - # use "docker" as our service name, not "docker-engine" -diff --git a/hack/make/.build-rpm/docker-engine.spec b/hack/make/.build-rpm/docker-engine.spec -index 2fc1406..53b7cd7 100644 ---- a/hack/make/.build-rpm/docker-engine.spec -+++ b/hack/make/.build-rpm/docker-engine.spec -@@ -11,11 +11,6 @@ URL: https://dockerproject.org - Vendor: Docker - Packager: Docker - --# docker builds in a checksum of dockerinit into docker, --# # so stripping the binaries breaks docker --%global __os_install_post %{_rpmconfigdir}/brp-compress --%global debug_package %{nil} -- - # is_systemd conditional - %if 0%{?fedora} >= 21 || 0%{?centos} >= 7 || 0%{?rhel} >= 7 || 0%{?suse_version} >= 1300 - %global is_systemd 1 -@@ -124,10 +119,6 @@ export DOCKER_GITCOMMIT=%{_gitcommit} - install -d $RPM_BUILD_ROOT/%{_bindir} - install -p -m 755 bundles/%{_origversion}/dynbinary/docker-%{_origversion} $RPM_BUILD_ROOT/%{_bindir}/docker - --# install dockerinit --install -d $RPM_BUILD_ROOT/%{_libexecdir}/docker --install -p -m 755 bundles/%{_origversion}/dynbinary/dockerinit-%{_origversion} $RPM_BUILD_ROOT/%{_libexecdir}/docker/dockerinit -- - # install udev rules - install -d $RPM_BUILD_ROOT/%{_sysconfdir}/udev/rules.d - install -p -m 644 contrib/udev/80-docker.rules $RPM_BUILD_ROOT/%{_sysconfdir}/udev/rules.d/80-docker.rules -@@ -175,7 +166,6 @@ install -p -m 644 contrib/syntax/nano/Dockerfile.nanorc $RPM_BUILD_ROOT/usr/shar - %files - %doc AUTHORS CHANGELOG.md CONTRIBUTING.md LICENSE MAINTAINERS NOTICE README.md - /%{_bindir}/docker --/%{_libexecdir}/docker/dockerinit - /%{_sysconfdir}/udev/rules.d/80-docker.rules - %if 0%{?is_systemd} - /%{_unitdir}/docker.service -diff --git a/hack/make/.dockerinit b/hack/make/.dockerinit -deleted file mode 100644 -index 4a62ee1..0000000 ---- a/hack/make/.dockerinit -+++ /dev/null -@@ -1,33 +0,0 @@ --#!/bin/bash --set -e -- --IAMSTATIC="true" --source "${MAKEDIR}/.go-autogen" -- --# dockerinit still needs to be a static binary, even if docker is dynamic --go build \ -- -o "$DEST/dockerinit-$VERSION" \ -- "${BUILDFLAGS[@]}" \ -- -ldflags " -- $LDFLAGS -- $LDFLAGS_STATIC -- -extldflags \"$EXTLDFLAGS_STATIC\" -- " \ -- ./dockerinit -- --echo "Created binary: $DEST/dockerinit-$VERSION" --ln -sf "dockerinit-$VERSION" "$DEST/dockerinit" -- --sha1sum= --if command -v sha1sum &> /dev/null; then -- sha1sum=sha1sum --elif command -v shasum &> /dev/null; then -- # Mac OS X - why couldn't they just use the same command name and be happy? -- sha1sum=shasum --else -- echo >&2 'error: cannot find sha1sum command or equivalent' -- exit 1 --fi -- --# sha1 our new dockerinit to ensure separate docker and dockerinit always run in a perfect pair compiled for one another --export DOCKER_INITSHA1=$($sha1sum "$DEST/dockerinit-$VERSION" | cut -d' ' -f1) -diff --git a/hack/make/.dockerinit-gccgo b/hack/make/.dockerinit-gccgo -deleted file mode 100644 -index 3caa526..0000000 ---- a/hack/make/.dockerinit-gccgo -+++ /dev/null -@@ -1,31 +0,0 @@ --#!/bin/bash --set -e -- --IAMSTATIC="true" --source "${MAKEDIR}/.go-autogen" -- --# dockerinit still needs to be a static binary, even if docker is dynamic --go build --compiler=gccgo \ -- -o "$DEST/dockerinit-$VERSION" \ -- "${BUILDFLAGS[@]}" \ -- --gccgoflags " -- -g -- -Wl,--no-export-dynamic -- $EXTLDFLAGS_STATIC -- -lnetgo -- " \ -- ./dockerinit -- --echo "Created binary: $DEST/dockerinit-$VERSION" --ln -sf "dockerinit-$VERSION" "$DEST/dockerinit" -- --sha1sum= --if command -v sha1sum &> /dev/null; then -- sha1sum=sha1sum --else -- echo >&2 'error: cannot find sha1sum command or equivalent' -- exit 1 --fi -- --# sha1 our new dockerinit to ensure separate docker and dockerinit always run in a perfect pair compiled for one another --export DOCKER_INITSHA1=$($sha1sum "$DEST/dockerinit-$VERSION" | cut -d' ' -f1) -diff --git a/hack/make/.go-autogen b/hack/make/.go-autogen -index 71f8370..c8e13b4 100644 ---- a/hack/make/.go-autogen -+++ b/hack/make/.go-autogen -@@ -14,10 +14,7 @@ const ( - GitCommit string = "$GITCOMMIT" - Version string = "$VERSION" - BuildTime string = "$BUILDTIME" -- - IAmStatic string = "${IAMSTATIC:-true}" -- InitSHA1 string = "$DOCKER_INITSHA1" -- InitPath string = "$DOCKER_INITPATH" - ) - // AUTOGENERATED FILE; see $BASH_SOURCE - DVEOF -@@ -44,9 +41,9 @@ When make binary is run, the Dockerfile prepares the build environment by: - - make.sh invokes hack/make/.go-autogen to: - -- - Run rsrc to create a binary file (autogen/winresources/rsrc.syso) that -- contains the manifest and icon. This file is automatically picked up by -- 'go build', so no post-processing steps are required. The sources for -+ - Run rsrc to create a binary file (autogen/winresources/rsrc.syso) that -+ contains the manifest and icon. This file is automatically picked up by -+ 'go build', so no post-processing steps are required. The sources for - rsrc.syso are under hack/make/.resources-windows. - - */ -diff --git a/hack/make/dynbinary b/hack/make/dynbinary -index e5fc0be..1d1a8e3 100644 ---- a/hack/make/dynbinary -+++ b/hack/make/dynbinary -@@ -1,16 +1,6 @@ - #!/bin/bash - set -e - --if [ -z "$DOCKER_CLIENTONLY" ]; then -- source "${MAKEDIR}/.dockerinit" -- -- hash_files "$DEST/dockerinit-$VERSION" --else -- # DOCKER_CLIENTONLY must be truthy, so we don't need to bother with dockerinit :) -- export DOCKER_INITSHA1="" --fi --# DOCKER_INITSHA1 is exported so that other bundlescripts can easily access it later without recalculating it -- - ( - export IAMSTATIC="false" - export LDFLAGS_STATIC_DOCKER='' -diff --git a/hack/make/dyngccgo b/hack/make/dyngccgo -index 0747637..a9019e8 100644 ---- a/hack/make/dyngccgo -+++ b/hack/make/dyngccgo -@@ -1,16 +1,6 @@ - #!/bin/bash - set -e - --if [ -z "$DOCKER_CLIENTONLY" ]; then -- source "${MAKEDIR}/.dockerinit-gccgo" -- -- hash_files "$DEST/dockerinit-$VERSION" --else -- # DOCKER_CLIENTONLY must be truthy, so we don't need to bother with dockerinit :) -- export DOCKER_INITSHA1="" --fi --# DOCKER_INITSHA1 is exported so that other bundlescripts can easily access it later without recalculating it -- - ( - export IAMSTATIC="false" - export EXTLDFLAGS_STATIC='' -diff --git a/integration-cli/docker_cli_diff_test.go b/integration-cli/docker_cli_diff_test.go -index 4f29d36..e0d0914 100644 ---- a/integration-cli/docker_cli_diff_test.go -+++ b/integration-cli/docker_cli_diff_test.go -@@ -27,10 +27,10 @@ func (s *DockerSuite) TestDiffFilenameShownInOutput(c *check.C) { - } - - // test to ensure GH #3840 doesn't occur any more --func (s *DockerSuite) TestDiffEnsureDockerinitFilesAreIgnored(c *check.C) { -+func (s *DockerSuite) TestDiffEnsureInitLayerFilesAreIgnored(c *check.C) { - testRequires(c, DaemonIsLinux) - // this is a list of files which shouldn't show up in `docker diff` -- dockerinitFiles := []string{"/etc/resolv.conf", "/etc/hostname", "/etc/hosts", "/.dockerinit", "/.dockerenv"} -+ initLayerFiles := []string{"/etc/resolv.conf", "/etc/hostname", "/etc/hosts", "/.dockerenv"} - containerCount := 5 - - // we might not run into this problem from the first run, so start a few containers -@@ -41,7 +41,7 @@ func (s *DockerSuite) TestDiffEnsureDockerinitFilesAreIgnored(c *check.C) { - cleanCID := strings.TrimSpace(out) - out, _ = dockerCmd(c, "diff", cleanCID) - -- for _, filename := range dockerinitFiles { -+ for _, filename := range initLayerFiles { - c.Assert(out, checker.Not(checker.Contains), filename) - } - } -diff --git a/pkg/mount/mountinfo_linux_test.go b/pkg/mount/mountinfo_linux_test.go -index 812d12e..bd100e1 100644 ---- a/pkg/mount/mountinfo_linux_test.go -+++ b/pkg/mount/mountinfo_linux_test.go -@@ -224,7 +224,6 @@ const ( - 43 16 0:34 / /proc/fs/nfsd rw,nosuid,nodev,noexec,relatime - nfsd nfsd rw - 44 15 0:35 / /home/tianon/.gvfs rw,nosuid,nodev,relatime - fuse.gvfs-fuse-daemon gvfs-fuse-daemon rw,user_id=1000,group_id=1000 - 68 15 0:3336 / /var/lib/docker/aufs/mnt/3597a1a6d6298c1decc339ebb90aad6f7d6ba2e15af3131b1f85e7ee4787a0cd rw,relatime - aufs none rw,si=9b4a7640128db39c --85 68 8:6 /var/lib/docker/init/dockerinit-0.7.2-dev//deleted /var/lib/docker/aufs/mnt/3597a1a6d6298c1decc339ebb90aad6f7d6ba2e15af3131b1f85e7ee4787a0cd/.dockerinit rw,noatime,nodiratime - ext4 /dev/sda6 rw,data=ordered - 86 68 8:6 /var/lib/docker/containers/3597a1a6d6298c1decc339ebb90aad6f7d6ba2e15af3131b1f85e7ee4787a0cd/config.env /var/lib/docker/aufs/mnt/3597a1a6d6298c1decc339ebb90aad6f7d6ba2e15af3131b1f85e7ee4787a0cd/.dockerenv rw,noatime,nodiratime - ext4 /dev/sda6 rw,data=ordered - 87 68 8:6 /etc/resolv.conf /var/lib/docker/aufs/mnt/3597a1a6d6298c1decc339ebb90aad6f7d6ba2e15af3131b1f85e7ee4787a0cd/etc/resolv.conf rw,noatime,nodiratime - ext4 /dev/sda6 rw,data=ordered - 88 68 8:6 /var/lib/docker/containers/3597a1a6d6298c1decc339ebb90aad6f7d6ba2e15af3131b1f85e7ee4787a0cd/hostname /var/lib/docker/aufs/mnt/3597a1a6d6298c1decc339ebb90aad6f7d6ba2e15af3131b1f85e7ee4787a0cd/etc/hostname rw,noatime,nodiratime - ext4 /dev/sda6 rw,data=ordered -diff --git a/utils/utils.go b/utils/utils.go -index 340b9e4..49f50dd 100644 ---- a/utils/utils.go -+++ b/utils/utils.go -@@ -1,124 +1,17 @@ - package utils - - import ( -- "crypto/sha1" -- "encoding/hex" - "fmt" -- "io" - "io/ioutil" - "os" -- "os/exec" -- "path/filepath" - "runtime" - "strings" - - "github.com/docker/distribution/registry/api/errcode" -- "github.com/docker/docker/dockerversion" - "github.com/docker/docker/pkg/archive" - "github.com/docker/docker/pkg/stringid" - ) - --// SelfPath figures out the absolute path of our own binary (if it's still around). --func SelfPath() string { -- path, err := exec.LookPath(os.Args[0]) -- if err != nil { -- if os.IsNotExist(err) { -- return "" -- } -- if execErr, ok := err.(*exec.Error); ok && os.IsNotExist(execErr.Err) { -- return "" -- } -- panic(err) -- } -- path, err = filepath.Abs(path) -- if err != nil { -- if os.IsNotExist(err) { -- return "" -- } -- panic(err) -- } -- return path --} -- --func dockerInitSha1(target string) string { -- f, err := os.Open(target) -- if err != nil { -- return "" -- } -- defer f.Close() -- h := sha1.New() -- _, err = io.Copy(h, f) -- if err != nil { -- return "" -- } -- return hex.EncodeToString(h.Sum(nil)) --} -- --func isValidDockerInitPath(target string, selfPath string) bool { // target and selfPath should be absolute (InitPath and SelfPath already do this) -- if target == "" { -- return false -- } -- if dockerversion.IAmStatic == "true" { -- if selfPath == "" { -- return false -- } -- if target == selfPath { -- return true -- } -- targetFileInfo, err := os.Lstat(target) -- if err != nil { -- return false -- } -- selfPathFileInfo, err := os.Lstat(selfPath) -- if err != nil { -- return false -- } -- return os.SameFile(targetFileInfo, selfPathFileInfo) -- } -- return dockerversion.InitSHA1 != "" && dockerInitSha1(target) == dockerversion.InitSHA1 --} -- --// DockerInitPath figures out the path of our dockerinit (which may be SelfPath()) --func DockerInitPath(localCopy string) string { -- selfPath := SelfPath() -- if isValidDockerInitPath(selfPath, selfPath) { -- // if we're valid, don't bother checking anything else -- return selfPath -- } -- var possibleInits = []string{ -- localCopy, -- dockerversion.InitPath, -- filepath.Join(filepath.Dir(selfPath), "dockerinit"), -- -- // FHS 3.0 Draft: "/usr/libexec includes internal binaries that are not intended to be executed directly by users or shell scripts. Applications may use a single subdirectory under /usr/libexec." -- // https://www.linuxbase.org/betaspecs/fhs/fhs.html#usrlibexec -- "/usr/libexec/docker/dockerinit", -- "/usr/local/libexec/docker/dockerinit", -- -- // FHS 2.3: "/usr/lib includes object files, libraries, and internal binaries that are not intended to be executed directly by users or shell scripts." -- // https://refspecs.linuxfoundation.org/FHS_2.3/fhs-2.3.html#USRLIBLIBRARIESFORPROGRAMMINGANDPA -- "/usr/lib/docker/dockerinit", -- "/usr/local/lib/docker/dockerinit", -- } -- for _, dockerInit := range possibleInits { -- if dockerInit == "" { -- continue -- } -- path, err := exec.LookPath(dockerInit) -- if err == nil { -- path, err = filepath.Abs(path) -- if err != nil { -- // LookPath already validated that this file exists and is executable (following symlinks), so how could Abs fail? -- panic(err) -- } -- if isValidDockerInitPath(path, selfPath) { -- return path -- } -- } -- } -- return "" --} -- - var globalTestID string - - // TestDirectory creates a new temporary directory and returns its path. - -From e72192be404c9a8489191d43fd6e5c429081d5c8 Mon Sep 17 00:00:00 2001 -From: Aleksa Sarai -Date: Thu, 21 Jan 2016 01:27:46 +1100 -Subject: [PATCH 2/3] *: remove documentation references to dockerinit - -While the documentation is very patchy on dockerinit, remove all -references in packaging documentation to the now purged dockerinit. - -Signed-off-by: Aleksa Sarai ---- - project/PACKAGERS.md | 33 +-------------------------------- - 1 file changed, 1 insertion(+), 32 deletions(-) - -diff --git a/project/PACKAGERS.md b/project/PACKAGERS.md -index 780e961..3ca75e7 100644 ---- a/project/PACKAGERS.md -+++ b/project/PACKAGERS.md -@@ -210,7 +210,7 @@ the file "./VERSION". This binary is usually installed somewhere like - - ### Dynamic Daemon / Client-only Binary - --If you are only interested in a Docker client binary, set `DOCKER_CLIENTONLY` to a non-empty value using something similar to the following: (which will prevent the extra step of compiling dockerinit) -+If you are only interested in a Docker client binary, set `DOCKER_CLIENTONLY` to a non-empty value using something similar to the following: - - ```bash - export DOCKER_CLIENTONLY=1 -@@ -228,37 +228,6 @@ following: - This will create "./bundles/$VERSION/dynbinary/docker-$VERSION", which for - client-only builds is the important file to grab and install as appropriate. - --For daemon builds, you will also need to grab and install --"./bundles/$VERSION/dynbinary/dockerinit-$VERSION", which is created from the --minimal set of Docker's codebase that _must_ be compiled statically (and is thus --a pure static binary). The acceptable locations Docker will search for this file --are as follows (in order): -- --* as "dockerinit" in the same directory as the daemon binary (ie, if docker is -- installed at "/usr/bin/docker", then "/usr/bin/dockerinit" will be the first -- place this file is searched for) --* "/usr/libexec/docker/dockerinit" or "/usr/local/libexec/docker/dockerinit" -- ([FHS 3.0 Draft](https://www.linuxbase.org/betaspecs/fhs/fhs.html#usrlibexec)) --* "/usr/lib/docker/dockerinit" or "/usr/local/lib/docker/dockerinit" ([FHS -- 2.3](https://refspecs.linuxfoundation.org/FHS_2.3/fhs-2.3.html#USRLIBLIBRARIESFORPROGRAMMINGANDPA)) -- --If (and please, only if) one of the paths above is insufficient due to distro --policy or similar issues, you may use the `DOCKER_INITPATH` environment variable --at compile-time as follows to set a different path for Docker to search: -- --```bash --export DOCKER_INITPATH=/usr/lib/docker.io/dockerinit --``` -- --If you find yourself needing this, please don't hesitate to reach out to Tianon --to see if it would be reasonable or helpful to add more paths to Docker's list, --especially if there's a relevant standard worth referencing (such as the FHS). -- --Also, it goes without saying, but for the purposes of the daemon please consider --these two binaries ("docker" and "dockerinit") as if they were a single unit. --Mixing and matching can cause undesired consequences, and will fail to run --properly. -- - ## System Dependencies - - ### Runtime Dependencies - -From 71c63aa72e3788af27fef0de9005cde6c7728a2b Mon Sep 17 00:00:00 2001 -From: Aleksa Sarai -Date: Tue, 26 Jan 2016 23:46:22 +1100 -Subject: [PATCH 3/3] vendor: update engine-api - -This removes all references to InitPath and InitSha1, as well as pulling -in a few other minor engine-api fixes. - -Signed-off-by: Aleksa Sarai ---- - hack/vendor.sh | 2 +- - .../github.com/docker/engine-api/client/client.go | 22 +++++++++++++++------- - .../docker/engine-api/client/client_nounix.go | 6 ++++++ - .../docker/engine-api/client/client_unix.go | 6 ++++++ - .../docker/engine-api/client/container_commit.go | 9 +++------ - .../docker/engine-api/client/container_create.go | 17 +++-------------- - .../docker/engine-api/client/container_inspect.go | 2 +- - .../docker/engine-api/client/container_list.go | 2 +- - .../docker/engine-api/client/container_top.go | 2 +- - .../github.com/docker/engine-api/client/diff.go | 9 +++------ - .../github.com/docker/engine-api/client/exec.go | 4 ++-- - .../github.com/docker/engine-api/client/history.go | 8 +++----- - .../docker/engine-api/client/image_list.go | 2 +- - .../docker/engine-api/client/image_remove.go | 2 +- - .../docker/engine-api/client/image_search.go | 2 +- - .../github.com/docker/engine-api/client/login.go | 2 +- - .../github.com/docker/engine-api/client/network.go | 4 ++-- - .../github.com/docker/engine-api/client/version.go | 2 +- - .../github.com/docker/engine-api/client/volume.go | 6 +++--- - .../engine-api/types/container/host_config.go | 8 +++++++- - .../github.com/docker/engine-api/types/types.go | 5 +++-- - 21 files changed, 65 insertions(+), 57 deletions(-) - create mode 100644 vendor/src/github.com/docker/engine-api/client/client_nounix.go - create mode 100644 vendor/src/github.com/docker/engine-api/client/client_unix.go - -diff --git a/hack/vendor.sh b/hack/vendor.sh -index 535e4eb..a13d6c6 100755 ---- a/hack/vendor.sh -+++ b/hack/vendor.sh -@@ -22,7 +22,7 @@ clone git github.com/vdemeester/shakers 3c10293ce22b900c27acad7b28656196fcc2f73b - clone git golang.org/x/net 47990a1ba55743e6ef1affd3a14e5bac8553615d https://github.com/golang/net.git - clone git github.com/docker/go-units 651fc226e7441360384da338d0fd37f2440ffbe3 - clone git github.com/docker/go-connections v0.1.2 --clone git github.com/docker/engine-api v0.2.2 -+clone git github.com/docker/engine-api bdbab71ec21209ef56dffdbe42c9d21843c30862 - clone git github.com/RackSec/srslog 6eb773f331e46fbba8eecb8e794e635e75fc04de - clone git github.com/imdario/mergo 0.2.1 - -diff --git a/vendor/src/github.com/docker/engine-api/client/client.go b/vendor/src/github.com/docker/engine-api/client/client.go -index 28f00e5..a62d859 100644 ---- a/vendor/src/github.com/docker/engine-api/client/client.go -+++ b/vendor/src/github.com/docker/engine-api/client/client.go -@@ -10,6 +10,8 @@ import ( - "path/filepath" - "strings" - "time" -+ -+ "github.com/docker/go-connections/tlsconfig" - ) - - // Client is the API client that performs all operations -@@ -41,21 +43,27 @@ type Client struct { - func NewEnvClient() (*Client, error) { - var transport *http.Transport - if dockerCertPath := os.Getenv("DOCKER_CERT_PATH"); dockerCertPath != "" { -- tlsc := &tls.Config{} -- -- cert, err := tls.LoadX509KeyPair(filepath.Join(dockerCertPath, "cert.pem"), filepath.Join(dockerCertPath, "key.pem")) -+ options := tlsconfig.Options{ -+ CAFile: filepath.Join(dockerCertPath, "ca.pem"), -+ CertFile: filepath.Join(dockerCertPath, "cert.pem"), -+ KeyFile: filepath.Join(dockerCertPath, "key.pem"), -+ InsecureSkipVerify: os.Getenv("DOCKER_TLS_VERIFY") == "", -+ } -+ tlsc, err := tlsconfig.Client(options) - if err != nil { -- return nil, fmt.Errorf("Error loading x509 key pair: %s", err) -+ return nil, err - } - -- tlsc.Certificates = append(tlsc.Certificates, cert) -- tlsc.InsecureSkipVerify = os.Getenv("DOCKER_TLS_VERIFY") == "" - transport = &http.Transport{ - TLSClientConfig: tlsc, - } - } - -- return NewClient(os.Getenv("DOCKER_HOST"), os.Getenv("DOCKER_API_VERSION"), transport, nil) -+ host := os.Getenv("DOCKER_HOST") -+ if host == "" { -+ host = DefaultDockerHost -+ } -+ return NewClient(host, os.Getenv("DOCKER_API_VERSION"), transport, nil) - } - - // NewClient initializes a new API client for the given host and API version. -diff --git a/vendor/src/github.com/docker/engine-api/client/client_nounix.go b/vendor/src/github.com/docker/engine-api/client/client_nounix.go -new file mode 100644 -index 0000000..d07ab84 ---- /dev/null -+++ b/vendor/src/github.com/docker/engine-api/client/client_nounix.go -@@ -0,0 +1,6 @@ -+// +build windows darwin -+ -+package client -+ -+// DefaultDockerHost defines os specific default if DOCKER_HOST is unset -+const DefaultDockerHost = "tcp://127.0.0.1:2375" -diff --git a/vendor/src/github.com/docker/engine-api/client/client_unix.go b/vendor/src/github.com/docker/engine-api/client/client_unix.go -new file mode 100644 -index 0000000..39c4bd8 ---- /dev/null -+++ b/vendor/src/github.com/docker/engine-api/client/client_unix.go -@@ -0,0 +1,6 @@ -+// +build linux freebsd -+ -+package client -+ -+// DefaultDockerHost defines os specific default if DOCKER_HOST is unset -+const DefaultDockerHost = "unix:///var/run/docker.sock" -diff --git a/vendor/src/github.com/docker/engine-api/client/container_commit.go b/vendor/src/github.com/docker/engine-api/client/container_commit.go -index 488d087..47534a6 100644 ---- a/vendor/src/github.com/docker/engine-api/client/container_commit.go -+++ b/vendor/src/github.com/docker/engine-api/client/container_commit.go -@@ -27,11 +27,8 @@ func (cli *Client) ContainerCommit(options types.ContainerCommitOptions) (types. - if err != nil { - return response, err - } -- defer ensureReaderClosed(resp) - -- if err := json.NewDecoder(resp.body).Decode(&response); err != nil { -- return response, err -- } -- -- return response, nil -+ err = json.NewDecoder(resp.body).Decode(&response) -+ ensureReaderClosed(resp) -+ return response, err - } -diff --git a/vendor/src/github.com/docker/engine-api/client/container_create.go b/vendor/src/github.com/docker/engine-api/client/container_create.go -index 0f85e7b..61b560a 100644 ---- a/vendor/src/github.com/docker/engine-api/client/container_create.go -+++ b/vendor/src/github.com/docker/engine-api/client/container_create.go -@@ -39,18 +39,7 @@ func (cli *Client) ContainerCreate(config *container.Config, hostConfig *contain - return response, err - } - -- if serverResp.statusCode == 404 && strings.Contains(err.Error(), "No such image") { -- return response, imageNotFoundError{config.Image} -- } -- -- if err != nil { -- return response, err -- } -- defer ensureReaderClosed(serverResp) -- -- if err := json.NewDecoder(serverResp.body).Decode(&response); err != nil { -- return response, err -- } -- -- return response, nil -+ err = json.NewDecoder(serverResp.body).Decode(&response) -+ ensureReaderClosed(serverResp) -+ return response, err - } -diff --git a/vendor/src/github.com/docker/engine-api/client/container_inspect.go b/vendor/src/github.com/docker/engine-api/client/container_inspect.go -index c18a764..f99e46f 100644 ---- a/vendor/src/github.com/docker/engine-api/client/container_inspect.go -+++ b/vendor/src/github.com/docker/engine-api/client/container_inspect.go -@@ -19,10 +19,10 @@ func (cli *Client) ContainerInspect(containerID string) (types.ContainerJSON, er - } - return types.ContainerJSON{}, err - } -- defer ensureReaderClosed(serverResp) - - var response types.ContainerJSON - err = json.NewDecoder(serverResp.body).Decode(&response) -+ ensureReaderClosed(serverResp) - return response, err - } - -diff --git a/vendor/src/github.com/docker/engine-api/client/container_list.go b/vendor/src/github.com/docker/engine-api/client/container_list.go -index b55307c..f553287 100644 ---- a/vendor/src/github.com/docker/engine-api/client/container_list.go -+++ b/vendor/src/github.com/docker/engine-api/client/container_list.go -@@ -46,9 +46,9 @@ func (cli *Client) ContainerList(options types.ContainerListOptions) ([]types.Co - if err != nil { - return nil, err - } -- defer ensureReaderClosed(resp) - - var containers []types.Container - err = json.NewDecoder(resp.body).Decode(&containers) -+ ensureReaderClosed(resp) - return containers, err - } -diff --git a/vendor/src/github.com/docker/engine-api/client/container_top.go b/vendor/src/github.com/docker/engine-api/client/container_top.go -index 04aecc2..1673947 100644 ---- a/vendor/src/github.com/docker/engine-api/client/container_top.go -+++ b/vendor/src/github.com/docker/engine-api/client/container_top.go -@@ -20,8 +20,8 @@ func (cli *Client) ContainerTop(containerID string, arguments []string) (types.C - if err != nil { - return response, err - } -- defer ensureReaderClosed(resp) - - err = json.NewDecoder(resp.body).Decode(&response) -+ ensureReaderClosed(resp) - return response, err - } -diff --git a/vendor/src/github.com/docker/engine-api/client/diff.go b/vendor/src/github.com/docker/engine-api/client/diff.go -index 6639d8b..c57bf69 100644 ---- a/vendor/src/github.com/docker/engine-api/client/diff.go -+++ b/vendor/src/github.com/docker/engine-api/client/diff.go -@@ -15,11 +15,8 @@ func (cli *Client) ContainerDiff(containerID string) ([]types.ContainerChange, e - if err != nil { - return changes, err - } -- defer ensureReaderClosed(serverResp) - -- if err := json.NewDecoder(serverResp.body).Decode(&changes); err != nil { -- return changes, err -- } -- -- return changes, nil -+ err = json.NewDecoder(serverResp.body).Decode(&changes) -+ ensureReaderClosed(serverResp) -+ return changes, err - } -diff --git a/vendor/src/github.com/docker/engine-api/client/exec.go b/vendor/src/github.com/docker/engine-api/client/exec.go -index 3a86b40..3d4577e 100644 ---- a/vendor/src/github.com/docker/engine-api/client/exec.go -+++ b/vendor/src/github.com/docker/engine-api/client/exec.go -@@ -13,8 +13,8 @@ func (cli *Client) ContainerExecCreate(config types.ExecConfig) (types.Container - if err != nil { - return response, err - } -- defer ensureReaderClosed(resp) - err = json.NewDecoder(resp.body).Decode(&response) -+ ensureReaderClosed(resp) - return response, err - } - -@@ -41,8 +41,8 @@ func (cli *Client) ContainerExecInspect(execID string) (types.ContainerExecInspe - if err != nil { - return response, err - } -- defer ensureReaderClosed(resp) - - err = json.NewDecoder(resp.body).Decode(&response) -+ ensureReaderClosed(resp) - return response, err - } -diff --git a/vendor/src/github.com/docker/engine-api/client/history.go b/vendor/src/github.com/docker/engine-api/client/history.go -index 7769727..21a2622 100644 ---- a/vendor/src/github.com/docker/engine-api/client/history.go -+++ b/vendor/src/github.com/docker/engine-api/client/history.go -@@ -14,10 +14,8 @@ func (cli *Client) ImageHistory(imageID string) ([]types.ImageHistory, error) { - if err != nil { - return history, err - } -- defer ensureReaderClosed(serverResp) - -- if err := json.NewDecoder(serverResp.body).Decode(&history); err != nil { -- return history, err -- } -- return history, nil -+ err = json.NewDecoder(serverResp.body).Decode(&history) -+ ensureReaderClosed(serverResp) -+ return history, err - } -diff --git a/vendor/src/github.com/docker/engine-api/client/image_list.go b/vendor/src/github.com/docker/engine-api/client/image_list.go -index d961570..0cdb0ba 100644 ---- a/vendor/src/github.com/docker/engine-api/client/image_list.go -+++ b/vendor/src/github.com/docker/engine-api/client/image_list.go -@@ -32,8 +32,8 @@ func (cli *Client) ImageList(options types.ImageListOptions) ([]types.Image, err - if err != nil { - return images, err - } -- defer ensureReaderClosed(serverResp) - - err = json.NewDecoder(serverResp.body).Decode(&images) -+ ensureReaderClosed(serverResp) - return images, err - } -diff --git a/vendor/src/github.com/docker/engine-api/client/image_remove.go b/vendor/src/github.com/docker/engine-api/client/image_remove.go -index c9c232c..28edb8e 100644 ---- a/vendor/src/github.com/docker/engine-api/client/image_remove.go -+++ b/vendor/src/github.com/docker/engine-api/client/image_remove.go -@@ -22,9 +22,9 @@ func (cli *Client) ImageRemove(options types.ImageRemoveOptions) ([]types.ImageD - if err != nil { - return nil, err - } -- defer ensureReaderClosed(resp) - - var dels []types.ImageDelete - err = json.NewDecoder(resp.body).Decode(&dels) -+ ensureReaderClosed(resp) - return dels, err - } -diff --git a/vendor/src/github.com/docker/engine-api/client/image_search.go b/vendor/src/github.com/docker/engine-api/client/image_search.go -index 5d9413c..0cad8a7 100644 ---- a/vendor/src/github.com/docker/engine-api/client/image_search.go -+++ b/vendor/src/github.com/docker/engine-api/client/image_search.go -@@ -27,9 +27,9 @@ func (cli *Client) ImageSearch(options types.ImageSearchOptions, privilegeFunc R - if err != nil { - return results, err - } -- defer ensureReaderClosed(resp) - - err = json.NewDecoder(resp.body).Decode(&results) -+ ensureReaderClosed(resp) - return results, err - } - -diff --git a/vendor/src/github.com/docker/engine-api/client/login.go b/vendor/src/github.com/docker/engine-api/client/login.go -index e9ba842..5ddcd5b 100644 ---- a/vendor/src/github.com/docker/engine-api/client/login.go -+++ b/vendor/src/github.com/docker/engine-api/client/login.go -@@ -19,9 +19,9 @@ func (cli *Client) RegistryLogin(auth types.AuthConfig) (types.AuthResponse, err - if err != nil { - return types.AuthResponse{}, err - } -- defer ensureReaderClosed(resp) - - var response types.AuthResponse - err = json.NewDecoder(resp.body).Decode(&response) -+ ensureReaderClosed(resp) - return response, err - } -diff --git a/vendor/src/github.com/docker/engine-api/client/network.go b/vendor/src/github.com/docker/engine-api/client/network.go -index de7f184..90b9adb 100644 ---- a/vendor/src/github.com/docker/engine-api/client/network.go -+++ b/vendor/src/github.com/docker/engine-api/client/network.go -@@ -65,8 +65,8 @@ func (cli *Client) NetworkList(options types.NetworkListOptions) ([]types.Networ - if err != nil { - return networkResources, err - } -- defer ensureReaderClosed(resp) - err = json.NewDecoder(resp.body).Decode(&networkResources) -+ ensureReaderClosed(resp) - return networkResources, err - } - -@@ -80,7 +80,7 @@ func (cli *Client) NetworkInspect(networkID string) (types.NetworkResource, erro - } - return networkResource, err - } -- defer ensureReaderClosed(resp) - err = json.NewDecoder(resp.body).Decode(&networkResource) -+ ensureReaderClosed(resp) - return networkResource, err - } -diff --git a/vendor/src/github.com/docker/engine-api/client/version.go b/vendor/src/github.com/docker/engine-api/client/version.go -index e97b798..0e9ce61 100644 ---- a/vendor/src/github.com/docker/engine-api/client/version.go -+++ b/vendor/src/github.com/docker/engine-api/client/version.go -@@ -12,9 +12,9 @@ func (cli *Client) ServerVersion() (types.Version, error) { - if err != nil { - return types.Version{}, err - } -- defer ensureReaderClosed(resp) - - var server types.Version - err = json.NewDecoder(resp.body).Decode(&server) -+ ensureReaderClosed(resp) - return server, err - } -diff --git a/vendor/src/github.com/docker/engine-api/client/volume.go b/vendor/src/github.com/docker/engine-api/client/volume.go -index 3419def..597e318 100644 ---- a/vendor/src/github.com/docker/engine-api/client/volume.go -+++ b/vendor/src/github.com/docker/engine-api/client/volume.go -@@ -25,9 +25,9 @@ func (cli *Client) VolumeList(filter filters.Args) (types.VolumesListResponse, e - if err != nil { - return volumes, err - } -- defer ensureReaderClosed(resp) - - err = json.NewDecoder(resp.body).Decode(&volumes) -+ ensureReaderClosed(resp) - return volumes, err - } - -@@ -41,8 +41,8 @@ func (cli *Client) VolumeInspect(volumeID string) (types.Volume, error) { - } - return volume, err - } -- defer ensureReaderClosed(resp) - err = json.NewDecoder(resp.body).Decode(&volume) -+ ensureReaderClosed(resp) - return volume, err - } - -@@ -53,8 +53,8 @@ func (cli *Client) VolumeCreate(options types.VolumeCreateRequest) (types.Volume - if err != nil { - return volume, err - } -- defer ensureReaderClosed(resp) - err = json.NewDecoder(resp.body).Decode(&volume) -+ ensureReaderClosed(resp) - return volume, err - } - -diff --git a/vendor/src/github.com/docker/engine-api/types/container/host_config.go b/vendor/src/github.com/docker/engine-api/types/container/host_config.go -index f43263d..b7c459e 100644 ---- a/vendor/src/github.com/docker/engine-api/types/container/host_config.go -+++ b/vendor/src/github.com/docker/engine-api/types/container/host_config.go -@@ -151,6 +151,11 @@ func (rp *RestartPolicy) IsUnlessStopped() bool { - return rp.Name == "unless-stopped" - } - -+// IsSame compares two RestartPolicy to see if they are the same -+func (rp *RestartPolicy) IsSame(tp *RestartPolicy) bool { -+ return rp.Name == tp.Name && rp.MaximumRetryCount == tp.MaximumRetryCount -+} -+ - // LogConfig represents the logging configuration of the container. - type LogConfig struct { - Type string -@@ -178,7 +183,7 @@ type Resources struct { - KernelMemory int64 // Kernel memory limit (in bytes) - Memory int64 // Memory limit (in bytes) - MemoryReservation int64 // Memory soft limit (in bytes) -- MemorySwap int64 // Total memory usage (memory + swap); set `-1` to disable swap -+ MemorySwap int64 // Total memory usage (memory + swap); set `-1` to enable unlimited swap - MemorySwappiness *int64 // Tuning container memory swappiness behaviour - OomKillDisable *bool // Whether to disable OOM Killer or not - PidsLimit int64 // Setting pids limit for a container -@@ -190,6 +195,7 @@ type Resources struct { - type UpdateConfig struct { - // Contains container's resources (cgroups, ulimits) - Resources -+ RestartPolicy RestartPolicy - } - - // HostConfig the non-portable Config structure of a container. -diff --git a/vendor/src/github.com/docker/engine-api/types/types.go b/vendor/src/github.com/docker/engine-api/types/types.go -index 9666ea4..de8b0be 100644 ---- a/vendor/src/github.com/docker/engine-api/types/types.go -+++ b/vendor/src/github.com/docker/engine-api/types/types.go -@@ -142,6 +142,7 @@ type Container struct { - SizeRw int64 `json:",omitempty"` - SizeRootFs int64 `json:",omitempty"` - Labels map[string]string -+ State string - Status string - HostConfig struct { - NetworkMode string `json:",omitempty"` -@@ -198,6 +199,7 @@ type Info struct { - Images int - Driver string - DriverStatus [][2]string -+ SystemStatus [][2]string - Plugins PluginsInfo - MemoryLimit bool - SwapLimit bool -@@ -222,8 +224,6 @@ type Info struct { - Architecture string - IndexServerAddress string - RegistryConfig *registry.ServiceConfig -- InitSha1 string -- InitPath string - NCPU int - MemTotal int64 - DockerRootDir string -@@ -388,6 +388,7 @@ type NetworkResource struct { - Scope string - Driver string - IPAM network.IPAM -+ Internal bool - Containers map[string]EndpointResource - Options map[string]string - } -