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:
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