DBコンテナ内のデータ確認はdocker execコマンドを使用(Docker DesktopからでもOK)

docker docker
スポンサーリンク

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

コンテナ名を指定します。

パターン2. docker-compose execを使う
docker-compose exec <サービス名> bash

サービス名を指定します。

できることは同じなのですが、ちょっとだけ実行の仕方で差異があります。
それぞれ説明します。

パターン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# 

docker-compose.ymlのファイルがあるディレクトリじゃないとコマンド動きません。引っかかるポイントかもしれないので、注意してください。

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#の部分が表示されなかったです。
見てもらった方がわかるかも。

-tありの場合
% docker exec -it db_sample bash
bash-5.1# psql -U docker
psql (14.0)
Type "help" for help.

docker=> \dt
       List of relations
 Schema | Name | Type  | Owner 
--------+------+-------+-------
 public | book | table | user
(1 row)

docker=> \q
bash-5.1# exit
exit

これは見やすい

-tなしの場合
% docker exec -i db_sample bash 
psql -U docker
\dt
       List of relations
 Schema | Name | Type  | Owner 
--------+------+-------+-------
 public | book | table | user
(1 row)

\q
exit

こっちは見にくい

ということで、オプションの-itは指定しましょう。

コメント

タイトルとURLをコピーしました