Machine: 【Résolu】 Comment docker-machine peut-il ajouter un hôte docker existant?

Créé le 21 mars 2016  ·  63Commentaires  ·  Source: docker/machine

C'est un vieux problème, mais je ne trouve pas de réponse utile.

J'ai l'environnement suivant:
Nom de l'hôte local (mon ordinateur portable): Chris-Laptop
docker-machine est déjà installé, version 0.6.0, build e27fb87, Mac OS X 10.11
Nom de l'hôte distant (mon VPS): li845-130 (139.162.3.130)
docker-engine est déjà installé, CentOS 7.0

Processus du démon Docker dans l'hôte distant
[ root @ li845-130 ~] # ps -ef | grep docker |
racine 12093 1 0 02:09? 00:00:00 / usr / bin / démon docker -H tcp: //0.0.0.0 : 2376

2.Configurez la connexion ssh sans mot de passe
[ tdy218 @ Chris-Laptop .ssh] $ ssh [email protected]
Dernier échec de connexion: Mon Mar 21 02:54:06 UTC 2016 from 125.88.177.95 on ssh: notty
Il y a eu 54 tentatives de connexion infructueuses depuis la dernière connexion réussie.
Dernière connexion: Mon Mar 21 02:25:25 2016 from 114.248.235.223
[ root @ li845-130 ~] #

3.Ajoutez un hôte Docker distant aux machines Docker locales
[ tdy218 @ Chris-Laptop .ssh] $ docker-machine create --driver none -url = tcp: //139.162.3.130 : 2376 linodevps
Exécution des vérifications de pré-création ...
Création de la machine ...
Pour voir comment connecter votre client Docker au moteur Docker s'exécutant sur cette machine virtuelle, exécutez: docker-machine env linodevps
[ tdy218 @ Chris-Laptop .ssh] $ docker-machine ls
NOM ACTIVE DRIVER STATE URL SWARM DOCKER ERREURS
default * virtualbox Exécution tcp: //192.168.99.100 : 2376 v1.10.3
linodevps - aucun En cours d'exécution tcp: //139.162.3.130 : 2376 Inconnu Impossible d'interroger la version du docker: Impossible de lire la configuration TLS: ouvrez /Users/tdy218/.docker/machine/machines/linodevps/server.pem: aucun fichier ou répertoire de ce type
[ tdy218 @ Chris-Laptop .ssh] $
[ tdy218 @ Chris-Laptop .ssh] $ docker-machine -D régénérer-certs linodevps
Version de la machine Docker: 0.6.0, build e27fb87
Régénérer les certificats de machine TLS? Attention: c'est irréversible. (y / n): y
Régénérer les certificats TLS
Chemin binaire trouvé dans / usr / local / bin / docker-machine
Lancement du serveur de plugins pour le pilote aucun
Serveur de plugins écoutant à l'adresse 127.0.0.1:54648
() Appel de .GetVersion
Utilisation de l'API version 1
() Appel de .SetConfigRaw
() Appel de .GetMachineName
commande = configureAuth machine = linodevps
En attente de la disponibilité de SSH ...
Accès à la fonction WaitForSSH ...
(linodevps) Appel de .GetSSHHostname
(linodevps) Appel de .GetSSHPort
(linodevps) Appel de .GetSSHKeyPath
(linodevps) Appel de .GetSSHUsername
Utilisation du type de client SSH: externe
{[-o BatchMode = yes -o PasswordAuthentication = no -o StrictHostKeyChecking = no -o UserKnownHostsFile = / dev / null -o LogLevel = quiet -o ConnectionAttempts = 3 -o ConnectTimeout = 10 -o ControlMaster = no -o ControlPath = none @ -p 0] / usr / bin / ssh}
À propos de l'exécution de la commande SSH:
sortie 0
Erreur SSH cmd, sortie: état de sortie 255: utilisation: ssh [-1246AaCfGgKkMNnqsTtVvXxYy] [-b
..................

Erreur lors de l'obtention de la commande ssh 'exit 0': une erreur s'est produite lors de l'exécution d'une commande SSH!
commande: exit 0
err: état de sortie 255
sortie: utilisation: ssh [-1246AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
.....................

Il signale "Trop de tentatives d'attente pour SSH pour être disponible. Dernière erreur: Nombre maximum de tentatives (60) dépassé ..." enfin.

Pourquoi ? J'ai configuré la connexion ssh entre l'hôte local et l'hôte docker distant sans mot de passe.

Comment exporter l'hôte docker vers la ligne de commande locale de docker-machine?

Commentaire le plus utile

@dweomer L'ajout d'une machine docker existante à partir d'un autre ordinateur n'est-il pas un cas d'utilisation très courant et basique?

Tous les 63 commentaires

La prise en charge de la machine docker ajoute-t-elle un hôte docker existant?

Comme je cherchais la documentation pendant les 5 dernières heures, en fait, il y a l'option "--driver = none" (non documentée). Voir https://github.com/docker/machine/issues/2270 .

@ tdy218 @atemerev Si je me souviens bien, les options --driver none été intentionnellement enterrées (et je pensais avoir été supprimées de l'exécutable publié) car elles ne sont utilisées qu'à des fins de test.

Problème connexe: J'ai une gouttelette sur l'océan numérique créée avec docker-machine. Comment puis-je gérer une instance à partir d'un autre ordinateur portable?

Un collègue a recréé les certificats à partir de son ordinateur portable en utilisant docker-machine regenerate-certs [name] . et maintenant je ne peux plus accéder à mon instance. Dois-je copier les nouveaux certificats quelque part manuellement? La documentation à ce sujet est vraiment déroutante.

$ docker-machine ls
NAME           ACTIVE   DRIVER         STATE     URL                        SWARM   DOCKER    ERRORS
default        -        virtualbox     Stopped                                      Unknown   
gapp-sandbox   *        digitalocean   Running   tcp://xx.xxx.xxx.xx:2376           Unknown   Unable to query docker version: Get https://xx.xxx.xxx.xx:2376/v1.15/version: x509: certificate signed by unknown authority

J'ai trouvé une solution de contournement: https://github.com/docker/machine/issues/2270

Modifiez le fichier config.json de la machine pour qu'il pointe vers les clés CA et client de cette machine spécifique au lieu des clés globales de la machine.

J'ai donc copié tous les fichiers du dossier de mon collègue et remplacé tous les chemins par celui de ma machine. Dans mon cas, le chemin final est /Users/mturatti/.docker/machine/machines/gapp-sandbox/ .
Mauvaise solution, mais cela semble fonctionner.

ca.pem
cert.pem
config.json
id_rsa
id_rsa.pub
key.pem
server-key.pem
server.pem

@dweomer L'ajout d'une machine docker existante à partir d'un autre ordinateur n'est-il pas un cas d'utilisation très courant et basique?

@dweomer L'ajout d'une machine docker existante à partir d'un autre ordinateur n'est-il pas un cas d'utilisation très courant et basique?

@atemerev : Non, je ne pense pas que ce soit le cas. Si je comprends bien, Docker Machine existe pour créer / provisionner des hôtes compatibles Docker.

Cela étant dit, il existe le pilote generic un peu moins qu'évident que je pense que @ tdy218 devrait utiliser. Le pilote generic prendra le contrôle d'un hôte et le réapprovisionnera. Tout ce dont il a besoin est un hôte en cours d'exécution avec un démon ssh et un utilisateur sur cet hôte avec sudo accès

@dweomer
J'ai essayé d'utiliser un pilote générique pour ajouter un hôte docker existant dans les tests suivants.
Nom de l'hôte local (mon ordinateur portable): Chris-Laptop
docker-machine est déjà installé, version 0.6.0, build e27fb87, Mac OS X 10.11
Nom de l'hôte distant (mon VPS): li845-130 (139.162.3.130)
docker-engine est déjà installé, CentOS 7.0

Processus de démon 1.Docker dans l'hôte distant
[ root @ li845-130 ~] # ps -ef | grep docker |
racine 12093 1 0 02:09? 00:00:00 / usr / bin / démon docker -H tcp: //0.0.0.0 : 2376

2.Configurez la connexion ssh sans mot de passe
[ tdy218 @ Chris-Laptop ~] $ ssh [email protected]
Dernière connexion: Mon Mar 28 03:06:07 2016 from 111.193.199.188

3.Ajoutez un hôte Docker distant aux machines Docker locales
[ tdy218 @ Chris-Laptop ~] $ docker-machine -D create --driver generic --generic-ip-address 139.162.3.130 --generic-ssh-user root linodevps
Version de la machine Docker: 0.6.0, build e27fb87
Chemin binaire trouvé dans / usr / local / bin / docker-machine
Lancement du serveur de plugins pour le pilote générique
Serveur de plugins écoutant à l'adresse 127.0.0.1:50319
() Appel de .GetVersion
Utilisation de l'API version 1
() Appel de .SetConfigRaw
() Appel de .GetMachineName
(flag-lookup) Appel de .GetMachineName
(flag-lookup) Appel de .DriverName
(flag-lookup) Appel de .GetCreateFlags
Chemin binaire trouvé dans / usr / local / bin / docker-machine
Lancement du serveur de plugins pour le pilote générique
Serveur de plugins écoutant à l'adresse 127.0.0.1:50323
() Appel de .GetVersion
Utilisation de l'API version 1
() Appel de .SetConfigRaw
() Appel de .GetMachineName
(linodevps) Appel de .GetMachineName
(linodevps) Appel de .DriverName
(linodevps) Appel de .GetCreateFlags
(linodevps) Appel de .SetConfigFromFlags
Exécution des vérifications de pré-création ...
(linodevps) Appel de .PreCreateCheck
(linodevps) Appel de .GetConfigRaw
Création de la machine ...
(linodevps) Appel de .Create
(linodevps) Appel de .GetConfigRaw
(linodevps) Aucune clé SSH spécifiée. La connexion à cette machine maintenant et à l'avenir exigera que l'agent ssh contienne la clé appropriée.
(linodevps) DBG | IP: 139.162.3.130
(linodevps) Appel de .DriverName
(linodevps) Appel de .DriverName
En attendant que la machine fonctionne, cela peut prendre quelques minutes ...
(linodevps) Appel de .GetState
Détection du système d'exploitation de l'instance créée ...
En attente de la disponibilité de SSH ...
Accès à la fonction WaitForSSH ...
(linodevps) Appel de .GetSSHHostname
(linodevps) Appel de .GetSSHPort
(linodevps) Appel de .GetSSHKeyPath
(linodevps) Appel de .GetSSHUsername
Utilisation du type de client SSH: externe
{[-o BatchMode = yes -o PasswordAuthentication = no -o StrictHostKeyChecking = no -o UserKnownHostsFile = / dev / null -o LogLevel = quiet -o ConnectionAttempts = 3 -o ConnectTimeout = 10 -o ControlMaster = no -o ControlPath = none [email protected] -p 22] / usr / bin / ssh}
À propos de l'exécution de la commande SSH:
sortie 0
SSH cmd err, sortie::
Détection de l'approvisionneur ...
(linodevps) Appel de .GetSSHHostname
(linodevps) Appel de .GetSSHPort
(linodevps) Appel de .GetSSHKeyPath
(linodevps) Appel de .GetSSHUsername
Utilisation du type de client SSH: externe
{[-o BatchMode = yes -o PasswordAuthentication = no -o StrictHostKeyChecking = no -o UserKnownHostsFile = / dev / null -o LogLevel = quiet -o ConnectionAttempts = 3 -o ConnectTimeout = 10 -o ControlMaster = no -o ControlPath = none [email protected] -p 22] / usr / bin / ssh}
À propos de l'exécution de la commande SSH:
cat / etc / os-release
SSH cmd err, sortie:: NAME = "CentOS Linux"
VERSION = "7 (Core)"
ID = "centos"
ID_LIKE = "rhel fedora"
VERSION_ID = "7"
PRETTY_NAME = "CentOS Linux 7 (Core)"
ANSI_COLOR = "0; 31"
CPE_NAME = "cpe: / o: centos: centos : 7"
HOME_URL = " https://www.centos.org/ "
BUG_REPORT_URL = " https://bugs.centos.org/ "

CENTOS_MANTISBT_PROJECT = "CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION = "7"
REDHAT_SUPPORT_PRODUCT = "centos"
REDHAT_SUPPORT_PRODUCT_VERSION = "7"

Impossible de définir la clé CPE_NAME, aucun champ struct correspondant n'a été trouvé
Impossible de définir la clé, aucun champ struct correspondant trouvé
Impossible de définir la clé CENTOS_MANTISBT_PROJECT, aucun champ struct correspondant trouvé
Impossible de définir la clé CENTOS_MANTISBT_PROJECT_VERSION, aucun champ struct correspondant trouvé
Impossible de définir la clé REDHAT_SUPPORT_PRODUCT, aucun champ struct correspondant trouvé
Impossible de définir la clé REDHAT_SUPPORT_PRODUCT_VERSION, aucun champ struct correspondant trouvé
Impossible de définir la clé, aucun champ struct correspondant trouvé
hôte compatible trouvé: centos
Provisionnement avec centos ...
Aucun pilote de stockage spécifié, utilisant devicemapper

(linodevps) Appel de .GetMachineName
(linodevps) Appel de .GetSSHHostname
(linodevps) Appel de .GetSSHPort
(linodevps) Appel de .GetSSHKeyPath
(linodevps) Appel de .GetSSHUsername
Utilisation du type de client SSH: externe
{[-o BatchMode = yes -o PasswordAuthentication = no -o StrictHostKeyChecking = no -o UserKnownHostsFile = / dev / null -o LogLevel = quiet -o ConnectionAttempts = 3 -o ConnectTimeout = 10 -o ControlMaster = no -o ControlPath = none [email protected] -p 22] / usr / bin / ssh}

4.La ligne de commande de l'hôte du docker distant.
[ root @ linodevps ~] # ps -ef | grep docker |
racine 17079 1 0 03:06? 00:00:00 / usr / bin / démon docker -H tcp: //0.0.0.0 : 2376
racine 17185 1 0 03:06? 00:00:00 version sudo docker
racine 17190 17185 0 03:06? 00:00:00 version docker

Le processus du démon docker a été redémarré, mais il y avait deux autres processus de version de docker, puis j'ai essayé d'exécuter la commande de version de docker manuellement, c'était bloqué.

Il est si difficile d'ajouter un hôte docker existant à la ligne de commande docker-machine ...

Si l'hôte distant ne contient aucun moteur docker, il est facile de créer un hôte docker (installer le moteur docker) à partir de la ligne de commande docker-machine, mais comme le problème ci-dessus, la docker-machine est limitée.

@dweomer C'est vrai, mais si j'ai provisionné docker-machine ou docker-swarm, comment puis-je, par exemple, permettre à un autre développeur de déployer des conteneurs là-bas? Comment transférer des variables de configuration / d'environnement entre des machines? Jusqu'à présent, je ne peux utiliser que des hôtes docker-machine provisionnés moi-même, et uniquement à partir d'une seule machine (et si elle est cassée? Comment restaurer la configuration sur une autre?).

Pour moi, docker-machine / docker-swarm sont très loin d'être prêts pour la production, et devraient au moins être marqués beta. Ou j'aimerais entendre quiconque l'utilise réellement en production ...

FWIW, si vous déposez simplement ~ / .docker de cet hôte de poste de travail sur le nouveau (en supposant que le répertoire personnel est le même chemin), cela fonctionnera. Si le répertoire personnel diffère, vous devrez éditer les fichiers .json à plusieurs endroits (clés et certificats, et c) pour changer par exemple /Users/macuser/.docker en /home/linuxuser/.docker .

Il semble que cette question a été soigneusement abordée et / ou couvre un terrain déjà établi dans d'autres questions. Merci a tous.

@nathanleclaire Pour être clair, est-ce que l'approche officielle pour ajouter des hôtes docker existants (qu'ils soient créés par docker-machine ou autrement) consiste à copier le dossier ~ / .docker entre les machines clientes? Si tel est le cas, y a-t-il un sous-ensemble particulier des fichiers / fichiers que nous devons copier?

Si l'approche officielle consiste plutôt à utiliser le pilote générique, il serait utile de résoudre le problème @ tdy218 décrit dans le commentaire ici .

Je ne pense pas que cette question ait été abordée du tout. J'essaie de pousser le code vers une nouvelle machine et la meilleure réponse que n'importe qui puisse trouver pour trouver le gars qui a fabriqué la machine et copier ses fichiers dans les miens.

Je ne sais pas si quelqu'un a essayé cela ici dans le monde réel, mais ça craint.

@TheSeanBrady Continuons la discussion sur les questions civiles. Si vous avez des propositions de solutions que vous aimeriez voir, veuillez les partager. Restons concentrés sur les solutions aux problèmes.

Je suis juste honnête. Vous essayez d'envoyer des e-mails demandant des fichiers, car jusqu'à présent, cela ne fonctionne pas pour moi. Cela a été clos sans aborder le problème.

Je suis juste honnête. Vous essayez d'envoyer des e-mails demandant des fichiers, car jusqu'à présent, cela ne fonctionne pas pour moi. Cela a été clos sans aborder le problème.

Vous ne pensez pas que dire quelque chose "craint" et impliquer que le reste d'entre nous ne vivons pas "dans le monde réel" est inutilement dur et non constructif?

Nous essayons de favoriser une communauté où la collaboration et la positivité sont encouragées. Je demande que si vous voulez participer, vous suivez également ces principes.

En raison de l'utilisation d'informations d'identification d'API stockées, de clés SSH et de certificats, le partage de docker-machine s entre les ordinateurs est un problème de gestion des secrets / ACL à part entière, auquel d'autres classes de technologie ont été inventées. C'est un problème de portée assez important. Des mesures peuvent potentiellement être prises pour l'atténuer et aider votre cas d'utilisation, alors pourquoi ne pas suggérer des solutions proactives à mettre en œuvre?

Si vous souhaitez soumettre une proposition pour résoudre ce problème, n'hésitez pas. Si vous souhaitez également faire une proposition sauvegardée par code dans une pull request, je vous encourage également à le faire. Mais dans tous les cas, veuillez concentrer la discussion sur les solutions et restez positif.

Vous ne pensez pas que dire quelque chose "craint" et impliquer que le reste d'entre nous ne vivons pas "dans le monde réel" est inutilement dur et non constructif?

Pas vraiment quand c'est le suivi ...

Il semble que cette question a été soigneusement abordée et / ou couvre un terrain déjà établi dans d'autres questions. Merci a tous.

C'est à peu près ce que j'appelle un licenciement sommaire. Et par "monde réel", je veux dire l'environnement dans lequel nous utilisons ce truc, pas où vous pouvez croiser l'un des développeurs dans le hall.

Cela aurait été une réponse plus appropriée ...

En raison de l'utilisation des informations d'identification d'API stockées, des clés SSH et des certificats, le partage de machines docker entre les ordinateurs est un problème de gestion des secrets / ACL à part entière, auquel d'autres classes de technologie ont été inventées.

... même si ces technologies ont été inventées et que la plupart sont open source.

Cependant, depuis que vous avez demandé, qu'en est-il d'un docker-machine add <hostname> , utilisant l'authentification par clé SSH pour transmettre les certificats requis pour la connexion TLS?

qu'en est-il d'un docker-machine ajouter, en utilisant l'authentification par clé SSH pour transmettre les certificats requis pour la connexion TLS?

Cela pourrait résoudre le problème ... pour les environnements de développement au moins

Une autre option consiste à utiliser un socket docker sur un hôte disponible via SSH, ce qui est largement préférable pour moi car il utilise le mécanisme d'authentification SSH existant (qui dans mon cas est sauvegardé avec des HSM) et ne nécessite pas d'ajuster les ports / pare-feu pour prend en charge TLS.

J'ai hacké ma propre solution pour cela en utilisant socat, mais ce serait très bien si docker-machine pouvait le supporter. Il n'est pas difficile de ssh sur un hôte, d'installer socat s'il n'est pas déjà installé et d'utiliser socat pour transformer la session ssh en socket local pour communiquer avec le /var/lib/docker.sock distant. Cela signifie également que docker-machine n'aurait rien à savoir sur l'authentification, les certificats ou TLS dans ce mode de pilote, bien que cela dépende de socat localement pour créer le socket local ...

Ce serait bien de voir un mode de pilote qui effectue ce type de configuration de socket local de la même manière que le pilote ssh existant configure tous les éléments TLS. De nombreuses organisations ont déjà résolu la distribution / la redirection de port SSH, et s'attendre à ce qu'elles distribuent / gèrent maintenant une PKI pour le TLS (et ouvrent un autre port) est fastidieuse.

tyrell:~▻ cat Library/Local/bin/ber1docker 
#!/bin/bash

DOCKER_REMOTE_HOST="ber1.local"
DOCKER_SOCK="$TMPDIR/docker.sock"
export DOCKER_HOST="unix://$DOCKER_SOCK"
rm $DOCKER_SOCK

socat UNIX-LISTEN:$DOCKER_SOCK,reuseaddr,fork \
   EXEC:"ssh root@$DOCKER_REMOTE_HOST 'socat STDIO UNIX-CONNECT:/var/run/docker.sock'" &

Donc, pas de "docker-machine add ..."?

+1 pour docker-machine add ...

Nous voulons avoir la beauté de eval $(docker-machine env mymachine) pour tous les membres de notre équipe (pour les environnements de développement partagés, bien sûr).

J'ai créé une gouttelette avec le pilote digitalocean et j'ai installé un site en utilisant docker-compose depuis mon poste de travail.

Ensuite, j'ai dû travailler sur le site mais depuis un endroit complètement différent, loin de mon poste de travail où j'ai exécuté les commandes d'origine de la machine docker.

N'est-ce pas une situation assez courante?

C'est une solution très courante. Surtout si vous travaillez dans une chose appelée "équipe". Mais ils évitent ce sujet depuis environ 18 mois maintenant. Tout ce qu'ils font, c'est fermer des problèmes comme celui-ci et dire quelque chose comme "c'est super compliqué d'implémenter une telle fonctionnalité" et que vous pouvez le faire vous-même et proposer une pull request à tout moment.
Il me semble qu'ils n'ont même pas commencé à travailler sur une solution au cours des 18 derniers mois.

Merci pour votre réponse, bien que ce ne soit pas encore un moyen facile de le réaliser.

Conservez les informations d'identification et autres dans le cloud.

Donnez-moi des instructions sur la façon d'utiliser ma boîte de dépôt ou Google Drive pour le stocker.

Permettez-moi d'interroger les informations de digitalocean, car c'est le pilote que j'utilisais.

Cela ne peut vraiment pas être si difficile.

Ouais, ça semble sûr.
Le mercredi 9 novembre 2016 à 09:28 Michael Schwartz [email protected]
a écrit:

Conservez les informations d'identification et autres dans le cloud.

Donnez-moi des instructions sur la façon d'utiliser ma boîte de dépôt ou Google Drive pour le stocker.

Cela ne peut vraiment pas être si difficile.

-
Vous recevez cela parce que vous avez été mentionné.
Répondez directement à cet e-mail, affichez-le sur GitHub
https://github.com/docker/machine/issues/3212#issuecomment -259457472,
ou couper le fil
https://github.com/notifications/unsubscribe-auth/ABxbKbZQLUfK9ENnWpNKiF207ZGpXFs2ks5q8fSagaJpZM4H07I2
.

Pas moins sûr que d'envoyer les commandes et tout mon code sur Internet à DO en premier lieu.

Ou télécharger tous mes trucs propriétaires sur Docker Hub ou github, même un dépôt privé.

Pour ceux qui essaient d'ajouter une machine docker à l'environnement de développement, vous pouvez faire comme ceci:

docker-machine create -d "none" --url http://192.168.10.100 : 4243 bla

c'est si vous avez activé l'authentification HTTP et non TSL sur l'hôte.

J'ai passé beaucoup de temps à trouver ces trucs non documentés

Je pense qu'il semble un peu myope de permettre à une seule machine de gérer également un cluster docker. Plus qu'un simple partage de la responsabilité de la gestion du cluster avec votre équipe, qu'en est-il d'avoir plus d'un point de défaillance ou de permettre à plusieurs agents automatisés d'interagir avec le cluster docker?

+1 pour la commande d'exportation.

Il pourrait exporter tous les paramètres et certificats dans un fichier tar ou zip sécurisé qui peut être importé par une machine fixe avec un mot de passe.

Cela semble être une demande raisonnable.

@bmmathe Cette commande est déjà tar -c ~/.docker/machine | bzip2 > docker-machine-config.tbz2 .

Voici comment lxd gère cela. Peut-être qu'un mot de passe ou une clé pourrait être configuré sur la machine qui lui permettrait de copier ou de régénérer des certificats.

C'est tellement triste 😖. Mes machines distantes affichent maintenant localement l'état timeout lors de l'exécution de docker-machine ls , quelque chose a gâché les configurations de la machine. Je n'arrive pas à comprendre comment les reconfigurer / les réparer dans le dossier local des machines Docker. Plus de provisionnement local? Dois-je supprimer les VM et les recréer?

Vote pour une option permettant d'ajouter des machines distantes aux machines Docker locales:

ajout de docker-machine--chauffeur

⏳🤒

C'est une caractéristique vraiment importante. Je ne comprends pas pourquoi c'est si difficile. Même, si j'ai besoin de régénérer les certificats ne sera pas un problème pour moi, mais j'aimerais que cela soit documenté et une commande avec laquelle travailler.

Si je me souviens bien, mon problème a été causé par des autorisations incorrectes et / ou un nom d'utilisateur local ne correspondant pas à celui distant (l'utilisateur par défaut est docker-user ). C'est probablement un problème en votre nom, vous devez creuser plus profondément.
Le pilote générique pour la commande docker-machine fonctionne très bien pour différents fournisseurs, par exemple google.

Vérifiez-les:
https://github.com/docker/machine/issues/3522#issuecomment -280275707
https://docs.docker.com/machine/drivers/generic/
• Je ne trouve pas les autres conversations que j'ai eues sur ce sujet qui m'ont conduit à la solution.

Aujourd'hui, j'ai trouvé la cause de l'ajout d'une défaillance de l'hôte docker distant dans mon cas.
[ root @ linodevps ~] # ps -ef | grep docker | grep -v grep
racine 17079 1 0 03:06? 00:00:00 / usr / bin / docker daemon -H tcp: //0.0.0.0 : 2376 // Ce style d'écriture n'autorise pas la communication locale fd ou unix socket entre le client et le serveur docker, il se bloque donc à sudo docker commande version lors de l'exécution de l'ajout de docker-machine.

Pour le corriger, il suffit d'éditer le fichier de configuration du service docker (la valeur par défaut est /usr/lib/systemd/system/docker.service), changez la valeur du paramètre ExecStart de / usr / bin / docker daemon -H tcp: // 0.0.0.0 : 2376 vers / usr / bin / docker daemon -H tcp: //0.0.0.0 : 2376 -H unix: ///var/run/docker.sock (la valeur par défaut est / usr / bin / docker daemon -H fd: //) ou / usr / bin / docker daemon -H tcp: //0.0.0.0 : 2376 -H fd: // ou export DOCKER_HOST = tcp: //0.0.0.0 : 2376,
puis sudo systemctl daemon-reload && sudo systemctl restart docker, réexécutez la commande docker-machine add, attendez un moment, il s'ajoutera avec succès. Lors du processus d'ajout, la machine docker générera des certificats SSL pour l'hôte docker cible et générera un nouveau fichier de configuration du service docker 10-machine.conf dans un nouveau répertoire nommé /etc/systemd/system/docker.service.d

tdy218 @ Chris-Laptop $ dm ls
NOM ACTIVE DRIVER STATE URL SWARM DOCKER ERREURS
docker-vm119 - tcp d' exécution générique
docker-vm120 - générique arrêté inconnu

docker-vm119 est l'hôte docker existant avant l'ajout.

Dans ce cas, nous savons que docker-machine est pris en charge en ajoutant un hôte docker existant, merci @Bean Young.

docker-machine create --driver none -url=tcp://123.123.123.123:2376 dockerhost1 est la meilleure chose que j'ai apprise sur docker depuis longtemps!

Il devrait vraiment être plus facile de partager une machine de développement entre utilisateurs.

// cc @nathanleclaire

mise à jour: pour être clair: en particulier, cela ne me dérange pas de pré-partager les certificats avec d'autres membres de l'équipe. Il y a également des améliorations à faire.

@dhrp quel processus suivez-vous pour pré-partager les certificats? Où peut-on les trouver?

Oh mon cher seigneur, je ne peux pas croire au passé plus d'un an et demi, personne ne veut tirer sur ce problème 😞 😞 😞

@thaJeztah @AkihiroSuda @albers @tianon pensez -vous vraiment que ce n'est pas une exigence très courante et critique?

J'ai essayé de réapprovisionner un hôte docker existant ( docker-machine create --driver=generic --generic-ip-address <ip> <name> et cela semblait fonctionner sans invalider les certificats existants. Cela a été fait à partir de la même machine qui a initialement provisionné l'hôte docker ... est-ce un résultat attendu?

Pouvez-vous rouvrir ce numéro? Je ne pense pas que cela soit encore résolu.

Je suis tombé dessus par accident.

Eh bien, @nathanleclaire a clarifié le point: ce n'est PAS le point d'ajouter une fonctionnalité do docker-machine, mais plutôt le point de partager des clés qui ne sont PAS censées être stockées ailleurs que sur la machine client d'origine. C'est exactement ainsi que cela est censé être fait et certaines personnes ici se mettent en colère sans réfléchir suffisamment à ce sujet.

Si vous voulez vraiment partager les clés avec une équipe, continuez avec n'importe quel dépôt privé de contrôle de source et acceptez les risques que vous prenez. Pour exporter les clés nécessaires, il existe un script que quelqu'un a déjà créé: https://gist.github.com/schickling/2c48da462a7def0a577e

"Il n'y a aucune raison pour laquelle nous ne pouvons pas être civils" - Leonidas

Je pense toujours que docker-machine devrait se comporter plus comme scp. Qu'est-ce qui empêche d'ajouter la prise en charge de plusieurs clés?

Une solution de contournement à cela, que je viens de trouver.
Si vous avez une machine docker existante sur la même plate-forme (la mienne est google) et que vous pouvez ssh / scp sur cette machine sans avoir besoin de docker-machine, vous pouvez copier l'autre machine et la faire fonctionner.
J'ai fait:

mkdir ~/.docker/machine/machines/new-machine
cp -r ~/.docker/machine/machines/old-machine/* ~/.docker/machine/machines/new-machine/

#then replace all instances of "old-machine" with "new-machine" in ~/.docker/machine/machines/new-machine/config.json

#then add the public key from your new-machine folder into the authorized_keys file for the docker-user on the new machine, e.g.
scp ~/.docker/machine/machines/new-machine/id_rsa.pub docker-user<strong i="8">@new_machine</strong>:/home/docker-user
ssh docker-user<strong i="9">@new_machine</strong> -c "cat ~/id_rsa.pub >>~/.ssh/authorized_keys"

(Ne copiez pas les commandes ssh textuellement, cherchez comment le faire correctement - https://encrypted.google.com/search?hl=en&q=ssh%20copy%20public%20key)

+1 pour la commande d'exportation / importation.
+1 pour la prise en charge de plusieurs clés.

Ne pas pouvoir déplacer les postes de gestion est tout simplement inacceptable et crée un point de défaillance unique et massif.

Par exemple, ordinateur perdu, vol, incendie, défaillance matérielle, défaillance logicielle, problèmes d'accès à l'équipe, problèmes administratifs, etc.

Docker-machine n'a pas été conçu dans cet esprit - il s'agit d'un outil de restauration rapide pour l'approvisionnement d'un seul développeur. C'est tout, clair et simple, et cela fonctionne - et c'est gratuit!

Certaines fonctionnalités mentionnées ici sont implémentées dans l'offre Docker EE (comme les équipes et RBAC).

Si les gens ne peuvent pas être reconnaissants, essayez au moins d'être raisonnable.

Je ne crois pas que le partage de machine ait encore été mentionné dans ce fil:

machine-export <machine-name>
>> exported to <machine-name>.zip
machine-import <machine-name>.zip
>> imported

Salut @andrevtg

Désolé si je paraissais ingrat. J'adore vraiment docker-machine et je pensais que cela la rendrait encore meilleure.
Je pense que la possibilité pour les développeurs uniques de se déplacer facilement entre les ordinateurs serait vraiment utile.

Si mon emploi du temps se libère, je pourrais essayer d'apprendre GO et essayer d'ajouter cette fonctionnalité.

Salut @ dmitrym0

Je pense que ce ticket était plus axé sur le manque de capacité à se connecter aux hôtes docker distants existants.
Cela étant dit, le partage de machine semble utile lors du déplacement d'hôtes docker locaux.
Merci pour la suggestion.

@ Jared-Harrington-Gibbs machine-share résout spécifiquement le problème de "l'ajout d'hôtes de docker-machine existants_". Nous déployons diverses applications via docker-compose, et cela fonctionne bien pour nous. Nous exportons l'ensemble de certificats avec machine-share et le distribuons à tous les membres de l'équipe qui en ont besoin. Ce n'est pas idéal mais ça marche bien.

J'ai essayé d'utiliser un pilote générique pour ajouter un hôte docker existant, il s'ajoutera avec succès après plusieurs tentatives.

@sneak Cette solution ne semble pas fonctionner pour moi, car les chemins dans config.json ne pointeront pas vers les bons fichiers. Je suppose que docker-machine repose sur le fichier config.json , mais je peux me tromper, je ne l'ai pas encore testé.

Cela me pose un problème, car j'exécute peut-être à partir d'un environnement où je ne connais peut-être pas le chemin exact dans lequel les fichiers sont stockés. Peut-être qu'il pourrait y avoir une option pour un chemin relatif?

Si le problème vient de l'homme, je pourrais consacrer quelques jours à essayer d'apporter une solution à la communauté. Je préférerais cependant avoir des instructions de la part des responsables. Est-ce que [Resolved] dans ce cas indique une décision de ne pas prendre en charge cette fonctionnalité de manière native, ou est-elle déjà prise en charge quelque part que je ne vois pas?

Il s'agit d'une fonctionnalité qui n'est pas du tout destinée à être implémentée. Cela n'a aucun sens d'attendre que la machine distante stocke les clés privées qui ne sont censées exister nulle part sauf sur la machine du développeur d'origine.

Même Docker EE s'assure qu'un «paquet client» différent est généré à chaque fois qu'il est demandé, et ne les stocke pas sur l'hôte.

Les gens ici demandent une fonctionnalité simple à implémenter, mais qui n'a aucun sens à implémenter en raison d'une contrainte de sécurité raisonnable.

@andrevtg La demande n'est pas pour la VM elle-même de stocker les clés (ce qui rendrait les clés totalement inutiles), mais pour le client docker-machine (qui est fait de code, c'est une application réelle), pour fournir un moyen aux utilisateurs pour transmettre volontairement des clés d'un client à un autre.

Une façon simple de le faire pourrait être de fournir une commande docker-machine export qui regroupe les clés dans une archive, et une commande docker-machine import pour un destinataire de cette archive pour importer les machines décrites dans l'archive. Le cryptage / décryptage aux limites de transmission des clés est alors l'affaire des utilisateurs (ils peuvent utiliser la messagerie PGP, SFTP, ce qu'ils veulent).

Exactement docker-machine create crée un énorme fichier de configuration et des clés que les novices ne comprennent pas ou ne savent pas répliquer. Peut-être que créer une clé ssh est aussi simple que d'ajouter une clé au fichier hosts, mais cela n'est pas documenté. Dans quel conteneur l'ajoutons-nous? Et comment le configurer sur une machine différente et en informer docker-machine ? Pouvons-nous encore utiliser docker-machine use ou devons-nous définir manuellement toutes les variables d'environnement.

Idéalement, il devrait y avoir un docker-machine add [name] pour ajouter une clé, docker-machine export pour exporter les fichiers de configuration et docker-machine import pour importer ces fichiers de configuration sur une autre machine. Ce serait également bien d'avoir docker-machine rm [name] pour révoquer l'accès aux clés.

@dhrp J'ai un serveur docker fonctionnant sur un rpi. Je voudrais y accéder depuis mon hôte local avec une machine docker. Il me suffirait donc de:
docker-machine create --driver none -url=tcp://raspberry.local:22 rpihost
Est-ce que ça marche?

Alors @ 360disrupt , n'est-ce pas? J'ai du mal avec le même cas d'utilisation.

Alors @ 360disrupt , n'est-ce pas? J'ai du mal avec le même cas d'utilisation.

Non pas encore.

Salut à tous. Ce n'était pas encore résolu? Nous utilisons docker pour toutes les applications de l'entreprise pour laquelle je travaille. Notre plus gros problème est lié au partage des machines. J'ai essayé d'utiliser le pilote générique plusieurs fois, mais le problème avec cette approche est que lorsque vous créez une machine avec le pilote générique et que vous la connectez à un serveur existant, la création supprime simplement les conteneurs actuellement en cours d'exécution sur le serveur.

Le seul moyen que nous avons trouvé était de créer un script simple en Python qui importait et exportait simplement la machine à laquelle le développeur souhaite accéder. Ce script est chargé de copier tous les fichiers de configuration et les certificats du propriétaire de la machine vers la nouvelle source. Cela fonctionne bien et nous n'avons aucun problème avec cela, c'est juste que je ne peux pas croire qu'il n'y ait pas de moyen officiel de partager des machines sans avoir à partager nos certificats privés.

Je travaille sur un projet et je le publierai dans GitHub pour résoudre ce problème d'une manière différente. Fondamentalement, je ne fais que construire un PaaS qui concentrera tous les certificats de toutes les machines que nous avons ici dans notre entreprise. Et quand quelqu'un veut déployer ou faire quelque chose comme ça, il vous suffit de vous connecter avec le PaaS, et non avec le serveur. C'est comme un tunnel. Bientôt, je publierai la première version de ce PaaS.

+1 pour docker-machine add ou docker-machine create --existing

cela a résolu mon problème: machine-share : computer:: rabbit2:

@dweomer L'ajout d'une machine docker existante à partir d'un autre ordinateur n'est-il pas un cas d'utilisation très courant et basique?

@atemerev : Non, je ne pense pas que ce soit le cas. Si je comprends bien, Docker Machine existe pour créer / provisionner des hôtes compatibles Docker.

Cela étant dit, il existe le pilote generic un peu moins qu'évident que je pense que @ tdy218 devrait utiliser. Le pilote generic prendra le contrôle d'un hôte et le réapprovisionnera. Tout ce dont il a besoin est un hôte en cours d'exécution avec un démon ssh et un utilisateur sur cet hôte avec sudo accès

Je sais que cela semble être un problème résolu, mais je voulais juste dire que je suis d'accord avec @atemerev : en tant qu'équipe de développement, nous avons le besoin de nous connecter à d'autres machines provisionnées presque chaque semaine .

cela a résolu mon problème: machine-share 💻 🐇

Je peux confirmer que ce package npm fonctionne.

Cette page vous a été utile?
0 / 5 - 0 notes