web-dev-qa-db-ja.com

実行中のpostgresコンテナのpsqlに入る方法は?

fig website のチュートリアルを使用してpostgresコンテナーを作成しました。コンテナに名前を付けましたdb

コンテナが実行されており、アプリは問題なく接続します。 dbコンテナを実行してコマンドfig run db psqlを実行しようとしましたが、エラーが発生しました:

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"?

実行中のdbコンテナのpsqlインターフェイスにアクセスするにはどうすればよいですか?

26
sargas

figは、使用されているものとは異なる名前でdockerコンテナを作成しますfig.ymlファイル内。

docker psを使用してコンテナ名を見つけ、[〜#〜] names [〜#〜]列を確認することで機能しました。

次に、実行コンテナでdocker exec -ti NAME_OF_CONTAINER psql -U YOUR_POSTGRES_USERNAMEを使用してpsqlコマンドを実行します

新しいコンテナを開始するdocker execとは対照的に、docker runは実行中のコンテナでpsqlコマンドを実行します。


更新

figdocker-compose と呼ばれるようになりました

50
sargas

図によって開始されたコンテナに接続するには、新しいコンテナを実行する必要があります。これは、メインコンテナがデフォルトでサービスを開始し、fig run db psql figを実行するとサービスが開始されず、代わりにpsqlクライアントが実行されるためです。 Dockerfile を参照してください。

そのため、PostgreSQLサービスに接続するには、figによって開始されたコンテナにリンクされた別のコンテナを実行する必要があります。 https://registry.hub.docker.com/_/postgres/ を参照してください。

まず、figは開始されたコンテナーの名前を変更するため、docker psを実行した後、fig upコンテナーのNAMES列を確認します。次に:

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'

docker execトリックを実行することも、@ sargasによって記述されることもできますが、リンク方法は私にとってより標準的なものに聞こえます。

2
dukebody

docker psの結果を投稿できますか?私の推測では、postgresコンテナが公開しているポートを指定する必要があります。 docker psを実行すると、

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

dbコンテナのPORTS列の下を見ると、dbが実際に公開されているポートが表示されます。この場合は49155ですが、コンテナの起動時に明示的に指定されていない場合、dockerは49153〜65535のランダムなポートを選択します。 -pオプションをpsqlに指定して、そのポートをターゲットにする必要があります

psql -p 49155 ... 

ソース: https://docs.docker.com/userguide/dockerlinks/

1
Justin