Fix the brittle errorstring-to-httperror recognition code which in turn is required by autopull (the client issues a pull if container creation returns 404)
Merge pull request #2704 from shykes/fix-auto-pull

Fix the brittle errorstring-to-httperror recognition code
test: put each arg in a separate string

Each arg to docker run should be placed in a separate string.
Otherwise, when starting the command via exec.Cmd, the command is
interpreted as "echo test", which can't be found.
test: fix TestCreateStartRestartStopStartKillRm

cat needs stdin opened
test: skip TestCreate on Fedora due to lxc utils bug

In the dind environment running on a Fedora host, the lxc utils get
confused by the /sys/fs/cgroup/cpuacct,cpu cgroup mount and lxc-start
fails trying to access the wrong cgroup directory.
test: 2 second timeout (not 2000)
test: fix races in TestReloadContainerLinks

The test wasn't actually killing the first containers before having the
runtime autostart them again, so we had 2 containers running out of the
same directory at the same time.

Also rename the containers and clean up the comments so it's a lot
clearer what's going on.
dockerinit: create a long-running dockerinit

Create a long-running dockerinit which does some setup, starts the
container app, waits for it to finish, and exits with the app's exit
code.

A long-running dockerinit is a prerequisite for using libvirt-lxc, since
libvirt provides no way to return an exit code, and no way to split
stdout and stderr into separate streams.

It also will allow docker to get rid of the ugly Ghost state, and might
even make it possible to do everything in the docker client and get rid
of the docker daemon altogether.
dockerinit: reap zombies
dockerinit: forward signals

Forward all signals received by dockerinit to the app, so that
dockerinit behaves more like the app itself.
fix container restart race condition

Finish container cleanup before setting the state to stopped.
Otherwise, for an application that exits quickly, a call to Restart
can allow Start to be called again before cleanup is done, resulting in
overritten data in the Container struct.
simplify the runtime Register reconnect logic

Refactor the Register code a little bit to make it easier to comprehend.
dockerinit: add RPC socket and Resume call

Create a per-container UNIX socket which is used for RPC communication
between the docker daemon and dockerinit.  The socket file is stored in
a bind-mounted <container root>/shared/ directory, seen as
/.docker-shared/ within the container.

Also add a Resume() RPC call which will allow docker to pause the
container startup until it's ready to resume.  This will be used in the
future to allow docker to hook up the console before resuming the
container so it doesn't miss any output.  The Resume() call will also be
needed for exit code reporting.
fix rpc file descriptor leak

Work around a bug in the Go RPC Client Close() function which returns an
error when the connection has already been closed, but doesn't close the
underlying socket FD.
dockerinit: exit code reporting

Add dockerinit RPC Wait() function that waits for the container app to
exit and returns its exit code to the docker daemon.

This is needed for using libvirt-lxc because libvirt doesn't provide the
exit code.  It will also help docker get rid of the Ghost state.
don't forward SIGCHLD to container

It makes no sense to forward SIGCHLD to the container.
dockerinit: kill support
test: fix TestRmi race condition
dockerinit: console FD passing

Move all the pty/pipe console handling into dockerinit.  Create a UNIX
socket whose sole purpose is to pass the console FDs to the docker
daemon.

This will allow us to get rid of the container Ghost state, since the
docker daemon can always reconnect to the container's console if needed.
It will also enable stdin/stdout/stderr separation when using
libvirt-lxc.
dockerinit: goodbye Ghost state

Now that we can always reconnect to dockerinit to connect to the console
and wait for the exit code, the Ghost state can go bye bye.