Armadilloフォーラム

コンテナ実行に関して(podman execに関して)

ftokioka

2024年5月1日 16時56分

コンテナ内のプログラムを下記のコード(C言語)を生成しました。
コンテナは、Debianです。

#include
void main()
{
for(;;) {
sleep(1);
}
}

gccで、実行モジュールを生成して、
HOST側から、下記のコマンドを実行しましたところ、下記が出力されます。
バッググランドで動作させます。pythonでは、動作しておりました。
podman exec -it test /a.out &
[3]+ Stopped (tty output) podman exec -it test /a.out
が出力されます。
バッググラウンドで動作させる方法は、どのように実施したら宜しいでしょうか?

後、podman exec にて実行するコマンドを相対パス指定して動作する方法はありませんでしょうか?
絶対パス指定でないと動作しないでしょうか?

宜しくお願い申し上げます。

コメント

at_reika.yamazaki

2024年5月1日 18時35分

お世話になっております。
山崎です。

質問の内容についてですが以下の二点だと思います。
・ バックグラウンド実行の方法
・ 相対パスでの指定は可能か
順に回答します。

1. バックグラウンド実行の方法

現在お使いのコマンドは以下だと思います。

podman exec -it test /a.out &

少し回答がずれますが、-d オプションを追加することでコンテナをバックグラウンド実行することが可能です。
以下のように -d を追加して実行してみてください。

podman exec -dit test /a.out

上記で、期待している動作になるかご確認いただけますと幸いです。

2. 相対パスでの指定は可能か

相対パスでの実行は可能です。
以下のように pwd コマンドを渡すと、カレントディレクトリのパスが取得できます。

podman exec -it test pwd

カレントディレクトリから、実行したいファイルへの相対パスで指定してみてください。

以上、どうぞよろしくお願いいたします。

回答ありがとうございます。

> 1. バックグラウンド実行の方法
> 現在お使いのコマンドは以下だと思います。
>

> podman exec -it test /a.out &
> 

> 少し回答がずれますが、-d オプションを追加することでコンテナをバックグラウンド実行することが可能です。
> 以下のように -d を追加して実行してみてください。
>

> podman exec -dit test /a.out
> 

> 上記で、期待している動作になるかご確認いただけますと幸いです。
 こちらは動作しました。ありがとうございます。

> 2. 相対パスでの指定は可能か
>
> 相対パスでの実行は可能です。
> 以下のように pwd コマンドを渡すと、カレントディレクトリのパスが取得できます。
>

> podman exec -it test pwd
> 

> カレントディレクトリから、実行したいファイルへの相対パスで指定してみてください。

pwdでは、取得は可能ですが、
先に、カレントディレクトリ操作後、実行したいのですが、それは、可能でしょうか?

podman exec -it test cd /home
としますと、
Error: crun: executable file `cd` not found in $PATH: No such file or directory: OCI runtime attempted to
invoke a command that was not found
と表示されます。

> 回答ありがとうございます。
>
> > 1. バックグラウンド実行の方法
> > 現在お使いのコマンドは以下だと思います。
> >

> > podman exec -it test /a.out &
> > 

> > 少し回答がずれますが、-d オプションを追加することでコンテナをバックグラウンド実行することが可能です。
> > 以下のように -d を追加して実行してみてください。
> >

> > podman exec -dit test /a.out
> > 

> > 上記で、期待している動作になるかご確認いただけますと幸いです。
>  こちらは動作しました。ありがとうございます。
>
> > 2. 相対パスでの指定は可能か
> >
> > 相対パスでの実行は可能です。
> > 以下のように pwd コマンドを渡すと、カレントディレクトリのパスが取得できます。
> >

> > podman exec -it test pwd
> > 

> > カレントディレクトリから、実行したいファイルへの相対パスで指定してみてください。
>
> pwdでは、取得は可能ですが、
> 先に、カレントディレクトリ操作後、実行したいのですが、それは、可能でしょうか?
>
> podman exec -it test cd /home
> としますと、
> Error: crun: executable file `cd` not found in $PATH: No such file or directory: OCI runtime attempted to
> invoke a command that was not found
> と表示されます。
>

at_reika.yamazaki

2024年5月2日 10時41分

お世話になっております。
山崎です。

>先に、カレントディレクトリ操作後、実行したいのですが、それは、可能でしょうか?
こちら、/bin/bash を使うことで実現可能です。
例としては以下になります。

podman exec -it test /bin/bash -c "cd /home && pwd"

上記を実行した場合、移動先の /home がカレントディレクトリになったことがわかるかと思います。
実際は pwd コマンドの代わりに、実行したいコマンドで置き換えてください。

以上、どうぞよろしくお願いいたします。