2014-12-28 7 views
17

Ich habe einen Postgres Container mit dem Tutorial auf der erstellt. Ich nannte den Container db.Wie komme ich in den psql eines laufenden postgres Containers?

Der Container läuft und meine App verbindet sich gut. Ich habe versucht, den Befehl fig run db psql mit dem db Container laufen und bekam den Fehler zu laufen:

psql: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

Wie kann ich in die psql Schnittstelle im laufenden db Container?

Antwort

26

Abb einen Docker Behälter mit einem anderen Namen als der in der fig.yml Datei verwendet schaffen.

Ich habe es funktioniert, indem ich den Container-Namen mit docker ps und Blick auf die NAMEN Spalte.

Dann läuft die psql Befehl in Laufbehälter mit docker exec -ti NAME_OF_CONTAINER psql -U YOUR_POSTGRES_USERNAME

Beachten Sie, dass docker exec läuft die psql Befehl auf einem laufenden Behälter, wie zum docker run gegenüber, die einen neuen Container beginnen.


aktualisieren

Abb jetzt heißt docker-compose

+0

Gute Antwort! Es ist sehr wichtig, zwischen "docker run " und "docker exec " zu unterscheiden. Sie können auch exec -it/bin/bash ** für die Entwicklung ** docken. – schmunk

+0

Müssen Daten dumpen, kann Docker nicht gehen exec -it – rocketspacer

1

Sie einen neuen Container ausgeführt werden müssen, das dem von Abb begann zu verbinden. Dies ist so, weil der Hauptcontainer standardmäßig den Dienst startet, und wenn Sie fig run db psql tun, startet fig NICHT den Dienst, sondern führt stattdessen den psql-Client aus. Siehe the Dockerfile.

Um sich mit dem PostgreSQL-Dienst zu verbinden, müssen Sie einen anderen Container verbunden mit dem von Abb. Gestartet starten. Siehe https://registry.hub.docker.com/_/postgres/.

Zuerst, da fig ändert die Namen der Container gestartet, überprüfen Sie die NAMES Spalte der docker ps Container nach getan fig up. Dann:

docker run -it --link <postgres_container_name>:postgres --rm postgres sh -c 'exec psql -h "$POSTGRES_PORT_5432_TCP_ADDR" -p "$POSTGRES_PORT_5432_TCP_PORT" -U postgres' 

Sie können tun, um den docker exec Trick sowie durch @sargas desribed auch, aber die Verknüpfung Weg klingt kanonisch mir.

+1

Die --link-Flag ist eine veraltete Legacy-Funktion von Docker: https://docs.docker.com/engine/userguide/networking/default_network/dockerlinks/ –

1

Können Sie das Ergebnis von docker ps posten? Meine Vermutung ist, dass Sie den Port angeben müssen, den der Postgres-Container freigibt. docker ps Laufen sollten Sie

CONTAINER ID  IMAGE       COMMAND    CREATED    STATUS    PORTS     NAMES 
948b1f6ebc0a  my_postgres:latest   "/usr/lib/postgresql 6 days ago   Up 6 days   0.0.0.0:49155->5432/tcp db 

geben und für Ihre db Behälter unter der PORTS Spalte suchen geben Sie den Port der db siehe tatsächlich ausgesetzt ist. In diesem Fall ist es 49155, aber Docker wird einen zufälligen Port zwischen 49153 und 65535 wählen, wenn er beim Containerstart nicht explizit angegeben wird.Sie müssen die -p Option liefern, um dann zu psql, dass Port Ziel als solche

psql -p 49155 ... 

Quelle: https://docs.docker.com/userguide/dockerlinks/

Verwandte Themen