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
インターフェイスにアクセスするにはどうすればよいですか?
figは、使用されているものとは異なる名前でdockerコンテナを作成しますfig.yml
ファイル内。
docker ps
を使用してコンテナ名を見つけ、[〜#〜] names [〜#〜]列を確認することで機能しました。
次に、実行コンテナでdocker exec -ti NAME_OF_CONTAINER psql -U YOUR_POSTGRES_USERNAME
を使用してpsql
コマンドを実行します
新しいコンテナを開始するdocker exec
とは対照的に、docker run
は実行中のコンテナでpsql
コマンドを実行します。
figは docker-compose と呼ばれるようになりました
図によって開始されたコンテナに接続するには、新しいコンテナを実行する必要があります。これは、メインコンテナがデフォルトでサービスを開始し、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によって記述されることもできますが、リンク方法は私にとってより標準的なものに聞こえます。
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 ...