Jeśli mam bazę danych mysql uruchomioną na jakimś komputerze hosta, a na tym hoście również działa kontener Docker: Jak uzyskać dostęp do bazy danych mysql z kontenera docker działającego na hoście?
Na przykład, czy istnieje sposób na opublikowanie portu hostów w kontenerze (odwrotność tego, co robi docker run -p)?
Odpowiedzi:
Istnieje kilka długotrwałych dyskusji na temat tego, jak to zrobić w spójny, dobrze zrozumiały i przenośny sposób. Brak pełnego rozwiązania, ale przekieruję Cię do poniższych dyskusji.
W każdym razie wielu z was chciałoby spróbować użyć opcji --add-host, aby docker run dodać adres IP hosta do pliku / etc / host kontenera. Stamtąd łatwo jest połączyć się z hostem na dowolnym wymaganym porcie:
Dokumentacja:
https://docs.docker.com/engine/reference/commandline/run/
Dyskusje na temat dostępu do hosta z kontenera:
https://github.com/docker/docker/issues/1143
https://github.com/docker/docker/issues/10023
źródło
Z dokumentów 18.03:
PRZYKŁAD: Oto, czego używam jako ciąg połączenia MySQL w moim kontenerze, aby uzyskać dostęp do instancji MySQL na moim hoście:
źródło
Począwszy od wersji Docker 17.06, w kontenerach Dockera dostępna jest specjalna nazwa DNS tylko dla komputerów Mac, która jest tłumaczona na adres IP hosta. To jest:
docker.for.mac.localhost
Dokumentacja jest tutaj: https://docs.docker.com/docker-for-mac/networking/#httphttps-proxy-support
źródło
docker.for.mac.host.internal
odDocker 17.12.0 ce
początku. docs.docker.com/docker-for-mac/release-notes/…docker.for.mac.localhost
działa18.03.1-ce-mac65
Użyj host.docker.internal od Dockera 18.03.
źródło
Docker version 18.03.0-ce, build 0520e24
18.03.1-ce-mac65
Inne odpowiedzi nie działały dobrze dla mnie. Mój kontener nie mógł rozpoznać adresu IP hosta za pomocą host.docker.internal . Istnieją dwa sposoby
Udostępnianie sieci hosta --net = host:
Używam adresu IP dockera, który zwykle to 172.17.0.1 . Możesz to sprawdzić, wywołując polecenie ifconfig i pobierając adres inet interfejsu dockera
Gdy już masz ten adres IP, możesz przekazać go jako argument do uruchomienia dockera, a następnie do aplikacji lub, tak jak ja, zmapować lokalizację jdbc.properties przez wolumin do katalogu na komputerze hosta, abyś mógł zarządzać plikiem zewnętrznie .
UWAGA: Twoja baza danych może nie zezwalać na połączenia zewnętrzne. W przypadku postgresql musisz edytować 2 pliki, jak opisano tutaj i tutaj :
Edytuj postgresql.conf, aby nasłuchiwać na wszystkich adresach. Domyślnie będzie wskazywać na localhost.
Edytuj pg_hba.conf, aby zezwolić na połączenia ze wszystkich adresów. Dodaj w ostatnim wierszu:
WAŻNE: Ostatni krok aktualizacji dostępu do bazy danych nie jest zalecany do użytku produkcyjnego, chyba że jesteś naprawdę pewien, co robisz.
źródło