2017-09-21 4 views
0

Ce que je veux faire:Comment définir des certificats TLS pour une machine à docker machine

Je dockerd en cours d'exécution sur une machine avec TLS VÉRIFIER définie sur true. Je voudrais ajouter cet hôte comme une machine à docker-machine

Ce que je l'ai fait:

J'ai utilisé la commande suivante pour démarrer dockerd:

$ sudo dockerd -D --tls=true --tlscert=cert.pem --tlskey=key.pem -H tcp://172.19.48.247:2376 

Sur une deuxième machine, je proviennent les variables suivantes:

export DOCKER_HOST=tcp://172.19.48.247:2376                     
export DOCKER_TLS_VERIFY=1 
export DOCKER_CERT_PATH=/path/to/ssl 

et coururent commande: docker avec succès

$ docker run busybox echo hello 
hello 

Puis j'ajouté ce docker-machine hôte:

docker-machine create --driver none --url=tcp://172.19.48.247:2376 dockerhost 

Là où je me trompe:

Je reçois une erreur x509: certificate signed by unknown authority maintenant.

$ docker-machine ls 
NAME  ACTIVE DRIVER  STATE  URL      SWARM DOCKER ERRORS          Unknown 
dockerhost -  none   Running tcp://172.19.48.247:2376   Unknown Unable to query docker version: Get https://172.19.48.247:2376/v1.15/version: x509: certificate signed by unknown authority 

J'ai essayé d'utiliser le docker-machine config, mais cela ne fonctionne pas:

$ docker-machine config dockerhost --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H tcp://172.19.48.247:2376 
Incorrect Usage. 

Usage: docker-machine config [OPTIONS] [arg...] 

Print the connection config for machine 

Description: 
    Argument is a machine name. 

Options: 

    --swarm Display the Swarm config instead of the Docker daemon 
flag provided but not defined: -tlsverify 
+1

Essayez de déplacer dockerhost à la fin de la commande et non le début –

Répondre

1

Par défaut, le pilote ne sera configuré pour utiliser les certs TLS trouvés à ~/.docker/machine. Ce n'est pas nécessairement ce qui est nécessaire, car vous rencontrerez l'erreur que vous avez rencontrée si votre hôte Docker distant a un certificat signé par autre chose que le fichier ca.pem que vous avez à cet emplacement.

J'ai trouvé une référence à une solution de contournement here que j'ai testée et qui semble définitivement fonctionner. Voici les étapes que je suivais:

docker-machine create -d none --url tcp://remotedocker.example.com:2376 remotedocker 

Cela crée le répertoire suivant:

~/.docker/machine/machines/remotedocker 

Dans ce répertoire est un fichier appelé config.json. Editez ce fichier et changez chaque instance de ".docker/machine/certs" en ".docker/machine/machines/remotedocker"

Normalement, lorsque vous accédez à Docker à distance, il n'a besoin que d'accéder au ca.pem, cert.pem et key.pem fichiers. Pour autant que je sache, les autres fichiers référencés dans config.json ne seront probablement pas utilisés par le pilote none car regenerate-certs n'est pas implémenté par none.

Vous devrez copier dans le ca.pem et les fichiers key.pem

À ce stade, vous devriez être en mesure d'exécuter docker-machine config remotedocker ou eval "$(docker-machine env remotedocker)" et utilisez votre démon distant avec succès.