J'utilise portainer et je ne parviens pas à gérer les points de terminaison distants. J'ai essayé d'utiliser la ligne de commande pour me connecter à des nœuds de docker distants, mais j'ai reçu un message Cannot connect to the Docker daemon at tcp://<remote_ip>:<port>. Is the docker daemon running?
.
Oui, ils courent. Je me suis ajouté au groupe Docker et je peux accéder à Docker par SSHing dans les nœuds. Cependant, je ne peux accéder à aucun nœud docker à distance.
J'ai modifié /etc/default
pour ajouter / décommenterDOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4 -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock"
J'ai également modifié /etc/init.d/docker
et /etc/init/docker.conf
inclus DOCKER_OPTS="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock"
.
J'ai redémarré le service Docker, je me suis déconnecté et connecté plusieurs fois au cours du processus, mais je ne parviens toujours pas à me connecter au nœud distant. Je ne peux même pas me connecter au nœud local en passant l'IP.
Qu'est-ce que j'ai raté? Quelle configuration dans quel fichier expose l'API sur TCP?
user@hostname:~$ docker -H tcp://<REMOTE_IP>:2375 info
Cannot connect to the Docker daemon at tcp://<REMOTE_IP>:2375. Is the docker daemon running?
user@hostname:~$ docker -H tcp://127.0.0.1:2375 info
Cannot connect to the Docker daemon at tcp://127.0.0.1:2375. Is the docker daemon running?
user@hostname:~$ docker -H tcp://<LOCAL_IP>:2375 info
Cannot connect to the Docker daemon at tcp://<LOCAL_IP>:2375. Is the docker daemon running?
user@hostname:~$
Edit:
Running ps aux | grep -i docker
renvoie ceci -
root 3581 0.1 0.2 596800 41540 ? Ssl 04:17 0:35 /usr/bin/dockerd -H fd://
root 3588 0.0 0.0 653576 14492 ? Ssl 04:17 0:18 docker-containerd -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --metrics-interval=0 --start-timeout 2m --state-dir /var/run/docker/libcontainerd/containerd --shim docker-containerd-shim --runtime docker-runc
ss -ntl
ps aux
dans ma réponse si cela aide.Réponses:
J'ai trouvé une solution grâce au post d'Ivan Krizsan .
J'ai dû éditer
/lib/systemd/system/docker.service
sur mon système Ubuntu 16.04.2 LTS pour modifier la ligneensuite
et tout a fonctionné :-). L'étape suivante consiste à comprendre comment protéger le formulaire de démon docker détourné.
la source
systemctl edit docker.service
et systemctl créera un nouveau fichier avec vos modifications. Cela empêche une mise à jour d'effacer vos modifications. SystemD fusionnera les deux fichiers lors de l'exécution. Bon document ici: digitalocean.com/community/tutorials/…ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:4243
-H tcp://
paramètre lui-même, sans le-H fd://
paramètre, je ne peux pas émettre de commandes client, par exemple .., info docker, version docker, etc.Le répertoire / etc / default est l'endroit où les responsables de la distribution placent leurs fichiers de configuration. Si vous installez Docker directement à partir des référentiels de Docker, ce répertoire ne sera pas utilisé.
Le répertoire / lib / systemd est l'endroit où les packages installeront leurs fichiers systemd et ils écraseront toutes les modifications lors de la mise à niveau. Si vous l'utilisez, vos modifications seront perdues.
Pour apporter vos propres modifications à un fichier d'unité systemd qui persistent, vous pouvez créer un fichier d'unité dans /etc/systemd/system/docker.service.d/, par exemple voici mon /etc/systemd/system/docker.service standard. d / override.conf:
Cette substitution désactive simplement tous les indicateurs de ligne de commande pour le démon dockerd de systemd. Une fois cela fait, vous pouvez remplacer chaque paramètre de /etc/docker/daemon.json qui est utilisé par docker et, selon le paramètre, peut être rechargé sans redémarrer le démon. Par exemple, voici un exemple /etc/docker/daemon.json:
Pour vos besoins, vous n'avez besoin que de la ligne pour définir les hôtes.
Les paramètres TLS sont une partie extrêmement importante du fichier de configuration ci-dessus. Si vous ne configurez pas TLS mutuel entre le client et le serveur et que vous ouvrez Docker pour écouter sur le réseau, vous exécutez l'équivalent d'un serveur Telnet ouvert avec des connexions root autorisées sans mot de passe. Si vous préférez ssh à telnet ou si vous préférez avoir un mot de passe pour votre compte root, vous devez configurer TLS. Les ports de l'API Docker sont fréquemment analysés sur Internet et vous trouverez rapidement des logiciels malveillants installés sur votre hôte si vous sautez cette étape de configuration.
Tous les détails sur la façon de configurer les clés TLS pour le client et le serveur sont disponibles sur: https://docs.docker.com/engine/security/https/
la source
Si vous ne voulez pas reconfigurer et redémarrer votre démon docker, vous pouvez simplement relier le socket unix à un socket TCP en utilisant
ncat
(à partir dunmap
package):Comme alternative, vous pouvez utiliser socat ou d'autres outils .
la source
nohup
et&
Il existe une documentation officielle qui décrit comment configurer où le démon Docker écoute les connexions .
Configuration de l'accès à distance avec le fichier d'unité systemd
Utilisez la commande sudo systemctl edit docker.service pour ouvrir un fichier de remplacement pour docker.service dans un éditeur de texte.
Ajoutez ou modifiez les lignes suivantes, en remplaçant vos propres valeurs.
Enregistrez le fichier.
Rechargez la configuration systemctl.
Redémarrez Docker.
Vérifiez si la modification a été respectée en examinant la sortie de netstat pour confirmer que dockerd écoute sur le port configuré.
Configuration de l'accès à distance avec
daemon.json
Définissez le tableau d'hôtes dans /etc/docker/daemon.json pour se connecter au socket UNIX et à une adresse IP, comme suit:
Redémarrez Docker.
Vérifiez si la modification a été respectée en examinant la sortie de netstat pour confirmer que dockerd écoute sur le port configuré.
Le client Docker honorera la
DOCKER_HOST
variable d'environnement pour définir l'-H
indicateur pour le client. Utilisez l'une des commandes suivantes:ou
la source