Weave Net

Securing the Docker Communications With TLS

If you are connecting to the docker daemon with TLS, you most likely want to do the same when connecting to the proxy. The proxy automatically detects the Docker daemon’s TLS configuration, and attempts to duplicate it.

In the standard auto-detection case you can launch a TLS-enabled proxy as follows:

host1$ weave launch

To disable auto-detection of TLS configuration, you can either pass the --no-detect-tls flag, or you can manually configure the proxy’s TLS using the same TLS-related command-line flags supplied to the Docker daemon.

For example, if you generated your certificates and keys into the Docker host’s /tls directory, launch the proxy using:

host1$ weave launch --tlsverify --tlscacert=/tls/ca.pem \
         --tlscert=/tls/server-cert.pem --tlskey=/tls/server-key.pem

The paths to your certificates and key must be provided as absolute paths as they exist on the Docker host.

Because the proxy connects to the Docker daemon at unix:///var/run/docker.sock, you must ensure that the daemon is actually listening there. To do ensure this, pass the -H unix:///var/run/docker.sock option when starting the Docker daemon, in addition to the -H options for configuring the TCP listener. See the Docker documentation for an example.

With the proxy running over TLS, you can configure the Docker client to use TLS on a per-invocation basis by running:

$ docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem \
     --tlskey=key.pem -H=tcp://host1:12375 version

or, by default, using:

$ mkdir -pv ~/.docker
$ cp -v {ca,cert,key}.pem ~/.docker
$ eval $(weave env)
$ export DOCKER_TLS_VERIFY=1
$ docker version

This is exactly the same configuration used when connecting to the Docker daemon directly, except that the specified port is the Weave proxy port.

See Also