Ich verwende portainer und kann keine Remote-Endpunkte verwalten. Ich habe versucht, über die Befehlszeile eine Verbindung zu Remote-Docker-Knoten herzustellen, habe jedoch eine Nachricht erhalten Cannot connect to the Docker daemon at tcp://<remote_ip>:<port>. Is the docker daemon running?
.
Ja, sie rennen. Ich habe mich der Docker-Gruppe hinzugefügt und kann über SSH auf die Knoten zugreifen. Ich kann jedoch nicht remote auf Docker-Knoten zugreifen.
Ich habe /etc/default
das Hinzufügen / Entfernen von Kommentaren geändertDOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4 -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock"
Ich veränderte auch /etc/init.d/docker
und /etc/init/docker.conf
einschließen DOCKER_OPTS="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock"
.
Ich habe den Docker-Dienst neu gestartet, mich dabei mehrmals abgemeldet und angemeldet, kann aber immer noch keine Verbindung zum Remote-Knoten herstellen. Ich kann nicht einmal eine Verbindung zum lokalen Knoten herstellen, indem ich die IP weitergebe.
Was habe ich verpasst? Welche Konfiguration in welcher Datei macht die API über TCP verfügbar?
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
gibt dies zurück -
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
in meine Antwort aufgenommen, wenn das hilft.Antworten:
Dank Ivan Krizsans Post habe ich eine Lösung gefunden .
Ich musste
/lib/systemd/system/docker.service
mein Ubuntu 16.04.2 LTS-System bearbeiten , um die Zeile zu änderndann
und alles hat geklappt :-). Der nächste Schritt besteht darin, herauszufinden, wie das entführte Docker-Daemon-Formular geschützt werden kann.
quelle
systemctl edit docker.service
und systemctl erstellen eine neue Datei mit Ihren Bearbeitungen. Dies verhindert, dass ein Update Ihre Änderungen löscht. SystemD führt die beiden Dateien zur Laufzeit zusammen. Gutes Dokument hier: digitalocean.com/community/tutorials/…ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:4243
-H tcp://
Einstellung alleine verwende,-H fd://
kann ich ohne die Einstellung keine Client-Befehle ausgeben, z. B. .., Docker-Informationen, Docker-Version usw.Im Verzeichnis / etc / default legen die Distributionsbetreuer ihre Konfigurationsdateien ab. Wenn Sie Docker direkt aus den Docker-Repositorys installieren, wird dieses Verzeichnis nicht verwendet.
Im Verzeichnis / lib / systemd installieren die Pakete ihre systemd-Dateien und überschreiben dort alle Änderungen beim Upgrade. Wenn Sie dies verwenden, gehen Ihre Änderungen verloren.
Um Ihre eigenen Änderungen an einer systemd-Unit-Datei vorzunehmen, die bestehen bleibt, können Sie eine Unit-Datei in /etc/systemd/system/docker.service.d/ erstellen, z. B. hier ist meine Standard-Unit /etc/systemd/system/docker.service. d / override.conf:
Durch diese Überschreibung werden einfach alle Befehlszeilen-Flags von systemd an den Dockerd-Daemon zurückgesetzt. Danach können Sie jede Einstellung aus /etc/docker/daemon.json überschreiben, die von docker verwendet wird. Abhängig von der Einstellung können Sie die Einstellungen erneut laden, ohne den Dämon neu zu starten. ZB hier ist ein Beispiel /etc/docker/daemon.json:
Für Ihre Zwecke benötigen Sie nur die Leitung, um die Hosts festzulegen.
Ein äußerst wichtiger Teil der obigen Konfigurationsdatei sind die TLS-Einstellungen. Wenn Sie kein gegenseitiges TLS zwischen Client und Server konfigurieren und Docker öffnen, um das Netzwerk zu überwachen, führen Sie das Äquivalent eines offenen Telnet-Servers mit Root-Anmeldungen aus, die ohne Kennwort zulässig sind. Wenn Sie ssh gegenüber Telnet bevorzugen oder ein Kennwort für Ihr Root-Konto bevorzugen, müssen Sie TLS konfigurieren. Die Docker-API-Ports werden häufig im Internet gescannt, und auf Ihrem Host wird in kurzer Zeit Malware installiert, wenn Sie diesen Konfigurationsschritt überspringen.
Ausführliche Informationen zum Konfigurieren der TLS-Schlüssel für Client und Server finden Sie unter: https://docs.docker.com/engine/security/https/
quelle
Wenn Sie Ihren Docker-Daemon nicht neu konfigurieren und neu starten möchten, können Sie den Unix-Socket einfach über
ncat
(aus demnmap
Paket) mit einem TCP-Socket verbinden :Alternativ können Sie socat oder andere Tools verwenden .
quelle
nohup
und&
Es gibt eine offizielle Dokumentation, in der beschrieben wird, wie Sie konfigurieren, wo der Docker-Dämon auf Verbindungen wartet .
Konfigurieren des Fernzugriffs mit der System-Unit-Datei
Verwenden Sie den Befehl sudo systemctl edit docker.service, um eine Überschreibungsdatei für docker.service in einem Texteditor zu öffnen.
Fügen Sie die folgenden Zeilen hinzu oder ändern Sie sie, indem Sie Ihre eigenen Werte ersetzen.
Speicher die Datei.
Laden Sie die systemctl-Konfiguration neu.
Starten Sie Docker neu.
Überprüfen Sie, ob die Änderung berücksichtigt wurde, indem Sie die Ausgabe von netstat überprüfen, um sicherzustellen, dass dockerd den konfigurierten Port überwacht.
Fernzugriff konfigurieren mit
daemon.json
Legen Sie das Host-Array in der Datei /etc/docker/daemon.json wie folgt fest, um eine Verbindung mit dem UNIX-Socket und einer IP-Adresse herzustellen:
Starten Sie Docker neu.
Überprüfen Sie, ob die Änderung berücksichtigt wurde, indem Sie die Ausgabe von netstat überprüfen, um sicherzustellen, dass dockerd den konfigurierten Port überwacht.
Der Docker-Client berücksichtigt die
DOCKER_HOST
Umgebungsvariable, um das-H
Flag für den Client zu setzen. Verwenden Sie einen der folgenden Befehle:oder
quelle