3.2. 実行中のコンテナーおよび停止したコンテナーの調査

実行中のコンテナーをいくつか作成したら、podman ps コマンドを実行して、実行中のコンテナーと、終了または停止したコンテナーの両方を一覧表示できます。podman inspect を使用して、そのコンテナー内の特定の情報を確認できます。

3.2.1. コンテナーの一覧表示

たとえば、ホストで実行しているコンテナーがあるとします。ホストシステムからコンテナーを使用するには、シェルを開いて、以下のコマンドを試します。

podman ps - ps オプションは、現在実行中のコンテナーをすべて表示します。

# podman run -d registry.redhat.io/rhel8/rsyslog
# podman ps
CONTAINER ID IMAGE              COMMAND         CREATED       STATUS            PORTS NAMES
74b1da000a11 rhel8/rsyslog /bin/rsyslog.sh 2 minutes ago Up About a minute       musing_brown

実行していないものの削除されていない (--rm オプション) コンテナーが存在する場合は、コンテナーがハングしているため再起動できます。podman ps -a コマンドは、実行中または停止中のコンテナーをすべて表示します。

# podman ps -a
CONTAINER ID IMAGE         COMMAND    CREATED    STATUS                PORTS NAMES     IS INFRA
d65aecc325a4 ubi8/ubi      /bin/bash  3 secs ago Exited (0) 5 secs ago peaceful_hopper false
74b1da000a11 rhel8/rsyslog rsyslog.sh 2 mins ago Up About a minute     musing_brown    false

3.2.2. コンテナーの検証

既存のコンテナーのメタデータを検証するには、podman inspect コマンドを実行します。コンテナーのメタデータをすべて表示することも、一部のメタデータのみを表示することもできます。たとえば、一部のコンテナーのメタデータをすべて表示するには、以下のコマンドを入力します。

# podman inspect 74b1da000a11
    ...
  "ID": "74b1da000a114015886c557deec8bed9dfb80c888097aa83f30ca4074ff55fb2",
  "Created": "2018-11-13T10:30:31.884673073-05:00",
  "Path": "/bin/rsyslog.sh",
  "Args": [
       "/bin/rsyslog.sh"
  ],
  "State": {
       OciVersion": "1.0.1-dev",
       Status": "running",
       Running": true,
    ...

inspect を使用して、コンテナーから特定の情報を取り出すこともできます。その情報は階層構造で保存されます。そのため、コンテナーの IP アドレス (NetworkSettings の下の IPAddress) を確認するには、--format オプションと、コンテナーの ID を使用します。以下に例を示します。

# podman inspect --format='{{.NetworkSettings.IPAddress}}' 74b1da000a11
10.88.0.31

検証するその他の情報の例としては、.Path (コンテナーで実行するコマンドの表示)、.Args (コマンドへの引数)、.Config.ExposedPorts (コンテナーから公開される TCP ポートまたは UDP ポート)、.State.Pid (コンテナーのプロセス ID の表示)、.HostConfig.PortBindings (コンテナーからホストへのポートマッピング) などがあります。以下は、.State.Pid と .State.StartedAt の例です。

# podman inspect --format='{{.State.Pid}}' 74b1da000a11
19593
# ps -ef | grep 19593
root     19593 19583  0 10:30 ?        00:00:00 /usr/sbin/rsyslogd -n
# podman inspect --format='{{.State.StartedAt}}' 74b1da000a11
2018-11-13 10:30:35.358175255 -0500 EST

最初の例では、ホストシステム (PID 19593) でコンテナーにした実行ファイルのプロセス ID を確認できます。ps -ef コマンドは、それが実行中の rsyslogd デーモンであることを確認します。2 つ目の例は、コンテナーが実行した日時を示しています。

3.2.3. コンテナーのコンテンツを調べる

実行中のコンテナーのコンテンツを調べるには、podman exec コマンドを使用できます。podman exec を使用し、(/bin/bash などの) コマンドを実行して実行中のコンテナープロセスに入り、そのコンテナを調べます。

bash シェルでコンテナーを起動するだけでなく、podman exec を使用する理由は、目的のアプリケーションを実行しているときにコンテナーを調査できるためです。コンテナーが目的のタスクを実行しているときにコンテナーに割り当てると、コンテナーのアクティビティーを妨害せずに、コンテナーが実際に何をするかをより的確に確認することができます。

以下は、podman exec を使用して、実行中の rsyslog を調べ、そのコンテナーの中身を調べる例です。

  1. コンテナーの起動 - 上述した rsyslog コンテナーイメージなどのコンテナーを起動します。podman ps を実行して、コンテナーが実行していることを確認します。

    # podman ps
    CONTAINER ID   IMAGE           COMMAND           CREATED       STATUS        PORTS   NAMES
    74b1da000a11   rsyslog:latest "/usr/rsyslog.sh   6 minutes ago Up 6 minutes          rsyslog
  2. podman exec - でコンテナーを入力します。コンテナー ID または名前を使用して bash シェルを開き、実行中のコンテナーにアクセスします。次に、コンテナーの属性を調べます。以下に例を示します。

    # podman exec -it 74b1da000a11 /bin/bash
    [root@74b1da000a11 /]# cat /etc/redhat-release
    Red Hat Enterprise Linux release 8.0
    [root@74b1da000a11 /]# yum install procps-ng
    [root@74b1da000a11 /]# ps -ef
    UID        PID  PPID  C STIME TTY          TIME CMD
    root         1     0  0 15:30 ?        00:00:00 /usr/sbin/rsyslogd -n
    root         8     0  6 16:01 pts/0    00:00:00 /bin/bash
    root        21     8  0 16:01 pts/0    00:00:00 ps -ef
    [root@74b1da000a11 /]# df -h
    Filesystem      Size  Used Avail Use% Mounted on
    overlay          39G  2.5G   37G   7% /
    tmpfs            64M     0   64M   0% /dev
    tmpfs           1.5G  8.7M  1.5G   1% /etc/hosts
    shm              63M     0   63M   0% /dev/shm
    tmpfs           1.5G     0  1.5G   0% /sys/fs/cgroup
    tmpfs           1.5G     0  1.5G   0% /proc/acpi
    tmpfs           1.5G     0  1.5G   0% /proc/scsi
    tmpfs           1.5G     0  1.5G   0% /sys/firmware
    [root@74b1da000a11 /]# uname -r
    4.18.0-80.1.2.el8_0.x86_64
    [root@74b1da000a11 /]# rpm -qa | more
    redhat-release-8.0-0.44.el8.x86_64
    filesystem-3.8-2.el8.x86_64
    basesystem-11-5.el8.noarch
    ncurses-base-6.1-7.20180224.el8.noarch
    ...
    bash-4.2# free -m
                  total        used        free      shared  buff/cache   available
    Mem:           1941         560         139          10        1241        1189
    Swap:          1023          15        1008
    [root@74b1da000a11 /]# exit

bash シェルからコマンドを実行 (コンテナー内で実行) すると、以下のような複数が項目を分かります。

  • コンテナーを、RHEL リリース 8.0 イメージから構築している。
  • プロセステーブル (ps -ef) が、/usr/sbin/rsyslogd コマンドのプロセス ID が 1 であることを示している。
  • ホストのプロセステーブルで実行しているプロセスは、コンテナーからは確認できない。ただし、rsyslogd プロセスはホストのプロセステーブルで確認できます (ホスト上のプロセス ID は 19593)。
  • コンテナーで別のカーネルが実行していない (uname -r はホストシステムのカーネルを示している)。
  • rpm -qa コマンドを使用すると、コンテナーに含まれる RPM パッケージを確認できる。つまり、コンテナーに RPM データベースがあります。
  • メモリーを表示 (free -m) を表示すると、ホストで利用可能なメモリーが表示される (ただし、コンテナーが実際に使用できるものは、cgroup を使用して制限可能)。

このページには機械翻訳が使用されている場合があります (詳細はこちら)。