TLS falló en Docker

Tengo un conocimiento muy limitado sobre la certificación TLS. Quería habilitar https para docker daemon. Seguí este tutorial pero al final no pude iniciar Docker Daemon.

Estoy usando docker en una máquina virtual Ubuntu 16.04 y mi cliente y server es la misma máquina. Entonces uso el $hostname como el ' Common Name ' durante todo el process.

Después de seguir todo el process en la documentation de Docker cuando ejecuto

 sudo dockerd --tlsverify --tlscacert=ca.pem --tlscert=server-cert.pem --tlskey=server-key.pem -H=0.0.0.0:2376 

Obtengo el logging INFO que API listen on [::]:2376 " API listen on [::]:2376 "

Cuando uso el siguiente command:

 docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H=$HOST:2376 version 

Recibo la respuesta adecuada.

Pero cuando vuelvo a cargar el daemon y trato de iniciar el acoplador, dice que no puedo iniciar el acoplador y le doy el siguiente post:

 Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details. 

La salida de 'journalctl -xe' es:
enter image description here

Copié el certificate necesario a ~/.docker/ y el ' ExecStart ' en mi file /lib/systemd/system/docker.service es:

 ExecStart=/usr/bin/dockerd -H fd:// -H 0.0.0.0:2376 \ --tlsverify --tlscacert=/home/sakib/.docker/ca.pem \ --tlskey=/home/sakib/.docker/key.pem \ --tlscert=/home/sakib/.docker/cert.pem 

Cuando bash comunicarme con la API, obtengo la siguiente respuesta:

 $ curl -X GET https://0.0.0.0:2376/images/json curl: (35) gnutls_handshake() failed: Certificate is bad $ docker version Client: Version: 1.12.1 API version: 1.24 Go version: go1.6.3 Git commit: 23cf638 Built: Thu Aug 18 05:33:38 2016 OS/Arch: linux/amd64 An error occurnetworking trying to connect: Get https://EL802:2376/v1.24/version: x509: certificate is valid for $HOST, not EL802 

NOTA: EL802 es mi nombre de host que configuro como la variable de entorno 'HOST'.

Creo que el problema es con el nombre 'CN' que elegí al crear el certificate del cliente. Creo el server y el certificate del cliente de la siguiente manera:

Servidor:

 openssl req -subj "/CN=$HOST" -sha256 -new -key server-key.pem -out server.csr 

Cliente:

 openssl req -subj '/CN=$HOST' -new -key key.pem -out client.csr 

Como mi cliente y server es mi máquina host (EL802) que configuré como la variable $HOST .

Su image no muestra la línea de error completa, pero si el post de error es:

  pid file found, ensure docker is not running or delete /var/run/docker.pid 

Pruebe y elimine el pid, y reinicie.
También verifique dos veces la installation de su docker en Ubuntu y su configuration de sistema .

x509: el certificate es válido para $ HOST, no EL802

Eso significa que el certificate se ha creado con la cadena $ HOST en lugar de su valor real.

 openssl req -subj '/CN=$HOST' 

La cita fuerte de las comillas simples evitaría que el shell replacea $HOST con su valor. Usa comillas dobles