dockerでDBのコンテナを立ち上げた時、データはどうやって確認していますか?
私は、docker execコマンドでコンテナ内のDBをチェックしたりします。
この記事では、PostgreSQLを例に解説します。
コンテナ上のDBにdocker execでアクセスする方法
前準備:DBを立ち上げる
PostgreSQLのDBを、docker-compose upで立ち上げます。
チェックするデータは、PostgreSQLの起動時にセットアップします。
具体的なやり方については、次の記事を参照してください。
コンテナ上でbashシェルを実行
DBを立ち上げたコンテナ内で、bashセッションを作成します。
コマンドでの実行方法は2パターンあります。
できることは同じなのですが、ちょっとだけ実行の仕方で差異があります。
それぞれ説明します。
パターン1. docker execを使う
docker exec -it <コンテナ名> bash
コンテナ名には、docker-compose.ymlのcontainer_nameを指定します。
version: '3'
services:
postgresql:
container_name: postgresql #コンテナ名はこれ!!
build: ./postgresql
実際に実行するとこんな感じ
% docker exec -it postgresql bash
bash-5.1#
ちなみに、オプション指定は必須です。
オプションの意味は最後に書きます。
パターン2. docker-compose execを使う
docker-compose exec <サービス名> bash
サービス名は、docker-compose.ymlのservicesで指定した名称です。
version: '3'
services:
postgresql: #ここがサービス名
container_name: postgresql
build: ./postgresql
実際に実行するとこんな感じ
% docker-compose exec postgresql bash
bash-5.1#
psqlでDBにアクセス
あとは、psql -U <ユーザー名>でアクセスするとDBのデータを確認できます。
今回の環境で、テーブルのデータを表示するところまでやってみました。
% docker exec -it db_sample bash
bash-5.1# psql -U user
psql (14.0)
Type "help" for help.
user=# \c docker
You are now connected to database "docker" as user "user".
docker=# \d
List of relations
Schema | Name | Type | Owner
--------+------+-------+-------
public | book | table | user
(1 row)
docker=# select * from book;
id | name
----+-----------------------------
1 | The Very Hungry Caterpillar
(1 row)
psqlコマンドの使い方などは、別記事で書いたので省略します。
余談
Docker Desktopからでもdocker exec実行可能
Docker DesktopのContainers/Appsから起動しているコンテナを選択して、右側のCLIのボタンをクリックすると、ターミナルでdocker execコマンドが実行されます。
bashセッションが作成されるので、あとは同じようにDBに接続すればOKです。
オプション-itの意味ってなんだ?
ざっくりこんな意味かな…(たぶん)
-i
: 標準入力できるようにする- -t:擬似TTYを割り当てる
-iがないと入力ができないです。
そして、-tがないとbash-5.1#の部分が表示されなかったです。
見てもらった方がわかるかも。
ということで、オプションの-itは指定しましょう。
コメント