Korzystam z Portainera i nie mogę zarządzać zdalnymi punktami końcowymi. Próbowałem użyć wiersza polecenia, aby połączyć się ze zdalnymi węzłami dokującymi, ale dostałem wiadomość Cannot connect to the Docker daemon at tcp://<remote_ip>:<port>. Is the docker daemon running?
.
Tak, działają. Dodałem się do grupy dokerów i mogę uzyskać dostęp do dokera przez SSHing do węzłów. Jednak nie mogę uzyskać zdalnego dostępu do żadnych węzłów dokerów.
Zmodyfikowałem, /etc/default
aby dodać / odkomentowaćDOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4 -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock"
Też zmodyfikowałem /etc/init.d/docker
i /etc/init/docker.conf
dołączyłem DOCKER_OPTS="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock"
.
Zrestartowałem usługę dokowania, wylogowałem się i zalogowałem wiele razy w tym procesie, ale nadal nie mogę połączyć się ze zdalnym węzłem. Nie mogę nawet połączyć się z węzłem lokalnym, przekazując adres IP.
Co przegapiłem? Jaka konfiguracja w jakim pliku ujawnia API przez 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:~$
Edycja:
Uruchomienie ps aux | grep -i docker
zwraca to -
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
w mojej odpowiedzi, jeśli to pomaga.Odpowiedzi:
Znalazłem rozwiązanie dzięki postowi Iwana Krizsana .
Musiałem edytować
/lib/systemd/system/docker.service
na moim systemie Ubuntu 16.04.2 LTS, aby zmodyfikować linięnastępnie
i wszystko działało :-). Następnym krokiem jest ustalenie, jak zabezpieczyć formę demona dokera przed przejęciem.
źródło
systemctl edit docker.service
i systemctl utworzy nowy plik z twoimi edycjami. Zapobiega to wyczyszczeniu zmian przez aktualizację. SystemD połączy dwa pliki w czasie wykonywania. Dobry dokument tutaj: digitalocean.com/community/tutorials/...ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:4243
-H tcp://
ustawienia, bez-H fd://
ustawienia, nie mogę wydawać poleceń klienta, np. informacji o dokerze, wersji dokera itp.Katalog / etc / default jest miejscem, w którym opiekunowie dystrybucji umieszczają swoje pliki konfiguracyjne. Jeśli zainstalujesz dokera bezpośrednio z repozytoriów Dockera, ten katalog nie będzie używany.
Katalog / lib / systemd to miejsce, w którym pakiety zainstalują swoje pliki systemowe i zastąpią tam wszelkie zmiany podczas aktualizacji. Jeśli użyjesz tego, twoje zmiany zostaną utracone.
Aby wprowadzić własne zmiany w pliku jednostki systemowej, który się utrzymuje, możesz utworzyć plik jednostki w /etc/systemd/system/docker.service.d/, np. Oto mój standardowy /etc/systemd/system/docker.service. d / override.conf:
To zastąpienie po prostu resetuje wszystkie flagi wiersza poleceń do demona dockerd z systemd. Po zakończeniu możesz zastąpić każde ustawienie z pliku /etc/docker/daemon.json, które jest używane przez okno dokowane, i w zależności od ustawienia można je ponownie załadować bez ponownego uruchamiania demona. Oto przykład /etc/docker/daemon.json:
Do swoich celów potrzebujesz tylko linii tam, aby ustawić hosty.
Jedną niezwykle ważną częścią powyższego pliku konfiguracyjnego są ustawienia TLS. Jeśli nie skonfigurujesz wzajemnego TLS między klientem a serwerem i otworzysz okno dokowane, aby nasłuchiwać w sieci, uruchamiasz odpowiednik otwartego serwera telnet z dozwolonymi loginami root bez hasła. Jeśli wolisz ssh niż telnet lub wolisz hasło do konta root, musisz skonfigurować TLS. Porty interfejsu dokującego API są często skanowane w Internecie i jeśli na tym etapie pominiesz ten krok, na swoim hoście znajdziesz złośliwe oprogramowanie.
Szczegółowe informacje na temat konfiguracji kluczy TLS dla klienta i serwera można znaleźć na stronie : https://docs.docker.com/engine/security/https/
źródło
Jeśli nie chcesz ponownie konfigurować i ponownie uruchamiać demona dokera, możesz po prostu zmostkować gniazdo unix z gniazdem TCP za pomocą
ncat
(znmap
pakietu):Alternatywnie możesz użyć socat lub innych narzędzi .
źródło
nohup
i&
Oficjalna dokumentacja opisuje, jak skonfigurować, gdzie demon Docker nasłuchuje połączeń .
Konfigurowanie dostępu zdalnego za pomocą systemowego pliku jednostki
Użyj polecenia sudo systemctl edit docker.service, aby otworzyć plik zastępujący docker.service w edytorze tekstu.
Dodaj lub zmodyfikuj następujące wiersze, zastępując własne wartości.
Zapisz plik.
Ponownie załaduj konfigurację systemctl.
Uruchom ponownie Docker.
Sprawdź, czy zmiana została uwzględniona, przeglądając dane wyjściowe netstat, aby potwierdzić, że dockerd nasłuchuje na skonfigurowanym porcie.
Konfigurowanie dostępu zdalnego za pomocą
daemon.json
Ustaw tablicę hosts w /etc/docker/daemon.json, aby połączyć się z gniazdem UNIX i adresem IP w następujący sposób:
Uruchom ponownie Docker.
Sprawdź, czy zmiana została uwzględniona, przeglądając dane wyjściowe netstat, aby potwierdzić, że dockerd nasłuchuje na skonfigurowanym porcie.
Klient Docker honoruje
DOCKER_HOST
zmienną środowiskową, aby ustawić-H
flagę dla klienta. Użyj jednego z następujących poleceń:lub
źródło