Armadilloフォーラム

コンテナからのコンテナ管理でのpodman_start使用について

tokita.shinichi

2023年11月21日 10時55分

お世話になります。
製品マニュアルの6.2.2.14. コンテナからのコンテナ管理について、「podman_start をインストールすればそちらも --remote で使えます。」とありますが、インストール方法がわかりませんでした。コンテナはAlpineですが、利用可能パッケージには見当たりませんでした。方法をご教授いただければ幸いです。
以上、宜しくお願いいたします。

コメント

at_dominique.m…

2023年11月21日 12時58分

tokita.shinichiさん

お世話になっています、
マルティネです。

> 製品マニュアルの6.2.2.14. コンテナからのコンテナ管理について、「podman_start をインストールすればそちらも --remote で使えます。」とありますが、インストール方法がわかりませんでした。コンテナはAlpineですが、利用可能パッケージには見当たりませんでした。方法をご教授いただければ幸いです。

説明不足で申し訳ございません。
podman_start は独立した shell スクリプトなので、ABOS 側のスクリプトをコピーするかボリュームマウントするといいです。

例えば、以下のコンフィグファイルでコンテナの管理はできています:

armadillo:~# cat /etc/atmark/containers/container-manager.conf 
set_image docker.io/alpine
set_command sleep infinity
 
add_volumes /run/podman:/run/podman:ro
add_volumes /etc/atmark/containers:/etc/atmark/containers:ro
add_volumes /usr/bin/podman_start:/usr/bin/podman_start:ro
armadillo:~# podman_start container-manager
armadillo:~# podman exec -ti container-manager sh
/ # apk add podman
# 新しい podman のバージョンで、デフォルトのリモートは変わったので
# この変数で固定します
/ # export CONTAINER_HOST=unix:/run/podman/podman.sock
/ # podman_start --remote python_app
/ # podman --remote ps
CONTAINER ID  IMAGE                                    COMMAND               CREATED         STATUS         PORTS       NAMES
2611134bc631  docker.io/library/alpine:latest          sleep infinity        3 minutes ago   Up 3 minutes               container-manager
6dc6195c5406  localhost/python_arm64_app_image:latest  sleep infinity        3 minutes ago   Up 3 minutes               python_app

どうしてもパッケージでインストールしたい場合は atmark-techno のリポジトリと鍵をコンテナに追加して、「abos-base」パッケージにあります(ABOS の /etc/apk/repositories, /etc/apk/keys/atmark*pub をコピーできます)

とはいえ、コンテナから podman_start を使うといくつかの機能を使えなくなります:
- podman --remote でいくつかのオプションが認識されなくなりますので、hotplugs をはじめフック機能を使えなくなります
- podman_start が ABOS側でディレクトリを扱う必要がある場合に失敗します(例えば add_volumes に /tmp か /run のパスを指定すると、podman_start がそのディレクトリの生成を行っていますが、ディレクトリがないと podman start が失敗します)
- (podman_start の不具合によって、add_devices を使う場合はデバイスを管理コンテナにも提供する必要があります。それは今月のアップデートで修正します)

hotplugs の対応は gui 系のコンテナに必要ですし、弊社のドキュメンテーションによく使われていますので、それを対応できないとなると podman_start --remote をとても推奨できる状態ではないと考えています。
機能を外す予定がありませんが、その「podman_start も --remote で使えます」をマニュアルから削除しようと思います。

大変お手数をおかけしますが、目的を podman stop/start で対応していただけますでしょうか。
できなかった場合は相談できるかもしれませんので、聞いてください。

よろしくお願いいたします。

マルティネ様
ご回答ありがとうございます。

podman --remoteでも対応できそうでしたので、そちらで行いたいと思います。

また、/run/podmanのボリュームマウントについて、そのままではpodman --remoteで以下のエラーが出て使用できなかったため、こちらではマウント先を/run/user/0/podmanに変更していたのですが、回答からCONTAINER_HOSTの変数を変更することでも対応できるとわかったため、そちらで対応したいと思います。

Cannot connect to Podman. Please verify your connection to the Linux system using `podman system connection list`, or try `podman machine init` and `podman machine start` to manage a new Linux VM
Error: unable to connect to Podman socket: Get "http://d/v4.5.1/libpod/_ping": dial unix ///run/user/0/podman/podman.sock: connect: no such file or directory

at_dominique.m…

2023年11月24日 10時36分

tokita.shinichiさん

マルティネです。

> podman --remoteでも対応できそうでしたので、そちらで行いたいと思います。

お手数をおかけしますが、よろしくお願いします。

> また、/run/podmanのボリュームマウントについて、そのままではpodman --remoteで以下のエラーが出て使用できなかったため、こちらではマウント先を/run/user/0/podmanに変更していたのですが、回答からCONTAINER_HOSTの変数を変更することでも対応できるとわかったため、そちらで対応したいと思います。

はい、とても分かりにくいですが alpine コンテナに入る podman のバージョンの更新で、podman が権限不足であることを察知して /run/podman/podman.sock から /run/user/0/podman/podman.sock へどこかのタイミングで切り替えました…
変数を使った方が安定して再びアップデートで変更があっても安定しますので、こちらとしても変数の方法を推奨します。その設定も、今月のマニュアルの更新で説明を追加する予定です。

よろしくお願いします。