Próbuję użyć kontenera Docker do uruchomienia serwera PostgreSQL i połączyć się z nim z komputera hosta.Kontener dokowania dla PostgreSQL 9.1 bez wystawiania portu 5432 na hosta
Moja konfiguracja to: ekspres
- Host: Mac OS X 10.10.5
- Docker 1.10.1
Robiłem to:
Krok 1 : utwórz wolumin dla stałych danych postgresowych
docker volume create --name postgres_data
Krok 2: Start instancja postgres
UPDATE: Jak sugerowano w komentarzach, ja podano mapowanie portów, gdy uruchomiony pojemnik
docker run --name my_postgres_container -e POSTGRES_PASSWORD=my_password -v postgres_data:/var/lib/postgresql/data -p 5432:5432 -d postgres:9.1
Krok 3: connect to przykład Docker w ten sposób:
docker run -it --link my_postgres_container:postgres --rm postgres:9.1 sh -c 'exec psql -h "$POSTGRES_PORT_5432_TCP_ADDR" -p "$POSTGRES_PORT_5432_TCP_PORT" -U postgres'
Bu t Chcę połączyć się z tą instancją przez:
psql -h localhost -p 5432 -U postgres
Tak jak w przypadku zainstalowania PostgreSQL lokalnie na moim komputerze-hoście.
Problem to port 5432 nie jest udostępniony. Tak więc, nie mogę połączyć się z nim:
sudo lsof -i -P | grep -i "listen"
-> Nie Port 5432 otwarty
UPDATE 2: Nawet obcy. Zrobiłem to również:
Przystanek Docker. Następnie uruchom normalną instancję PostgreSQL 9.4.4 w mojej maszynie głównej (tutaj nie ma żadnego dokera, tylko postgres działa na moim hostie Mac OS X, nasłuchując na porcie 5432). Wszystko jest normalne:
sudo lsof -i -P | grep -i "postgres"
postgres 14100 jorge 6u IPv4 0x780274158cebef01 0t0 TCP localhost:5432 (LISTEN)
mogę połączyć się z moim lokalnej instancji postgres bez problemu (patrz dane wyjściowe komendy: Czy postgres skompilowane dla systemu Mac OS X, mój gospodarz):
psql -h localhost -U postgres -c "select version()"
version
---------------------------------------------------------------------------------------------------------------------------------------
PostgreSQL 9.4.4 on x86_64-apple-darwin14.3.0, compiled by Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn), 64-bit
(1 row)
Teraz zabawna część. Ponownie uruchamiam instancję Docker, , gdy działa instancja PostgreSQL hosta.
Zaczyna się! (i nie powinno). Mogę nawet połączyć za pomocą run Döcker ...
docker run -it --link my_postgres_instance:postgres --rm postgres:9.1 sh -c 'exec psql -h "$POSTGRES_PORT_5432_TCP_ADDR" -p "$POSTGRES_PORT_5432_TCP_PORT" -U postgres'
Jeśli biegnę Wybierz wersję() teraz, pokazuje postgres uruchomione w moim przypadku Döcker na tych samych PostgreSQL czas ucieka w moim hostem, z docker, przy użyciu tego samego portu 5432.(Spójrz na ouput jest postgres skompilowany dla Debiana, OS wewnątrz PostgreSQL 9.1 pojemnik)
postgres=# select version();
version
------------------------------------------------------------------------------------------------
PostgreSQL 9.1.20 on x86_64-unknown-linux-gnu, compiled by gcc (Debian 4.9.2-10) 4.9.2, 64-bit
(1 row)
Dlaczego?
Czy ma to sens? Mój ostateczny cel to , aby uruchomić aplikację Django w innym kontenerze Docker i połączyć się z moją instancją PostgreSQL. Jak mogłem to zrobić?
Dzięki! To zrobiłem. Ale nadal nie można połączyć się przy użyciu psql. port 5432 nie jest narażony lub nie wiem jak się połączyć. Program psql mojego hosta działa poprawnie (mogę połączyć się z innymi hostami, ale nie z moim kontenerem). – jorgeas80
Co oznacza "port dokujacy"? –
Powinien wydrukować coś w rodzaju '5432/tcp -> 0.0.0.0: 5432' –