Podmanがコンテナを停止してコンテナに接続しようとしているのはなぜですか?

Podmanがコンテナを停止してコンテナに接続しようとしているのはなぜですか?

私はコンテナについて学び始めたので、何か欠けているか十分に読んでいないかもしれませんが、奇妙な動作が発生し、何が起こっているのか理解しようとしています。インターネットを検索しようとしましたが、説明が見つからなかったため、概念が欠落しているのか、制限に遭遇したのか、バグが発生したのかはわかりません。

既定では、コンテナに添付しようとするとコンテナが停止します。

私は中央リポジトリにインストールされたpodman v3.1.2を使用し、公式の「起動」ガイド(ここ)。私はすべてをユーザーモード(ルートなし)で実行しています。

ガイドで実行される初期コマンドの概要は次のとおりです。

$ podman pull docker.io/library/httpd >/dev/null
$ podman run -dt -p 8080:80/tcp docker.io/library/httpd
  48cf6fbe988a6feb243c62e5298b37f51709251cc05f8d39f17566e1d7fc17f7
 
$ podman ps
  CONTAINER ID  IMAGE                    COMMAND           CREATED         STATUS             PORTS                 NAMES
  48cf6fbe988a  docker.io/library/httpd  httpd-foreground  23 seconds ago  Up 22 seconds ago  0.0.0.0:8080->80/tcp  cool_cori
 
$ curl http://localhost:8080
  <html><body><h1>It works!</h1></body></html>
$ podman stop -l
  48cf6fbe988a6feb243c62e5298b37f51709251cc05f8d39f17566e1d7fc17f7
$ podman rm -l
  48cf6fbe988a6feb243c62e5298b37f51709251cc05f8d39f17566e1d7fc17f7

今まではそんなに良くなった。さて、ガイドから少し離れようとしています。コンテナ名を指定してコンテナに接続したら、端末内でbashを実行できることを確認したいと思います。私はそれを見て、man podman-runパラメータを追加しましたが、--name大丈夫だ--hostnameと思います。また、を読んでみると、man podman-attachコンテナ内にbash端末をインポートできるはずですが、使用するとコンテナが停止します。

$ podman run -dt --name "mycontainer" --hostname "testbox" -p 8081:80/tcp docker.io/library/httpd
  77e74e729ac0dd86ed5a58aa3481909148de9017ffc52b327f7e69f74da22549
 
$ curl http://localhost:8081
  <html><body><h1>It works!</h1></body></html>
 
$ podman attach mycontainer
 
$ podman ps
  CONTAINER ID  IMAGE   COMMAND  CREATED  STATUS  PORTS   NAMES
 
$ podman start mycontainer
 
$ podman ps
  CONTAINER ID  IMAGE                    COMMAND           CREATED        STATUS            PORTS                 NAMES
  77e74e729ac0  docker.io/library/httpd  httpd-foreground  2 minutes ago  Up 8 seconds ago  0.0.0.0:8081->80/tcp  mycontainer
 
$ curl http://localhost:8081
  <html><body><h1>It works!</h1></body></html>
 
$ podman attach mycontainer
  [Fri Jul 02 23:35:04.479855 2021] [mpm_event:notice] [pid 1:tid 140188888724608] AH00492: caught SIGWINCH, shutting down gracefully
 

それではこれはバグですか?そうでなければ、私が何を間違っているのですか/なぜこれが起こるのでしょうか?私の知識の空白のため、これが愚かなことなら謝罪します。また、最初に接続しようとすると、なぜサウンドなしで停止するのかわかりませんが、次回はメッセージが印刷されます。

エラーがあり、インターネット検索を試みましたが、3つの結果が出ました。 1つは中国語で、残りの2つは私の状況とは関係ありませんでした。 SELinuxもオフにして/etc/selinux/config再起動しましたが、違いはありませんでした。

編集:また、明確にするためにデフォルト値を使用しています。コマンドに示されているものに加えて、Podman、イメージ、またはコンテナに対して特別な操作を実行しません。cockpitパッケージもインストールしましたが、まだ使ったことはありません。

ベストアンサー1

実行中のプロセスを対話的に制御しようとしています。コンテナはこの-tオプションで実行されるため、Apacheはデーモン用ではなく端末に接続されます。端末に接続すると、ウィンドウ変更/サイズ調整信号がトリガされますSIGWINCH。 Apacheはこれを通常のシャットダウンを要求する信号として解釈します。つまり、コンテナが停止します。

おそらく次のようにする必要があります:

  • デーモンをデーモンとして実行(いいえ-t

    podman run -d --name "mycontainer" --hostname "testbox" -p 8081:80/tcp docker.io/library/httpd
    
  • 変えるpodman attachそしてpodman exec

    名前

    podman-attach - 実行中のコンテナに接続する

    [...]

    説明 Attach コマンドを使用すると、コンテナの ID または名前を使用して実行中のコンテナに接続し、進行中の出力を表示したり対話的に制御したりできます。

    そして

    名前

    podman-exec - 実行中のコンテナでコマンドを実行する

    [...]

    説明する

    podman execは、実行中のコンテナでコマンドを実行します。

    $ podman exec -it mycontainer bash
    root@testbox:/usr/local/apache2# ps -ef
    bash: ps: command not found
    root@testbox:/usr/local/apache2# ls -l /proc/1/exe
    lrwxrwxrwx 1 root root 0 Jul  3 11:50 /proc/1/exe -> /usr/local/apache2/bin/httpd
    root@testbox:/usr/local/apache2# 
    

おすすめ記事