為什麼 podman 停止容器為什麼我嘗試附加到它?
剛開始學習容器,所以我可能錯過了一些東西/還沒有讀夠,但我遇到了一個奇怪的行為,並試圖了解正在發生的事情。我嘗試使用Google搜尋,但無法找到解釋,所以我無法判斷我是否遺漏了一些概念、遇到了一些限製或遇到了錯誤。
基本上,當我嘗試附加到容器時,容器會停止。
我在 Fedora 33 上使用從中央儲存庫安裝的 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
and參數。--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
那麼這是一個錯誤嗎?否則,我做錯了什麼/為什麼會這樣?抱歉,由於我的知識空白,這是愚蠢的事情。也不確定為什麼我第一次嘗試附加它時它會靜默停止,但下次它會列印一條消息。
我嘗試用Google搜尋錯誤並得到 3 個結果。一個是中文的,另外兩個看起來與我的情況無關。我還通過關閉 SELinux
/etc/selinux/config
並重新啟動,但這沒有任何區別。編輯:還要澄清一下,我使用的是預設值。除了命令中顯示的內容之外,我還沒有為 podman、圖像或容器做任何特別的事情。我也安裝了該
cockpit
軟體包,但尚未使用它。
您正在嘗試對正在執行的程序進行互動式控制。由於容器是使用該
-t
選項執行的,因此 apache 連接到終端,這並不意味著用於守護程序。附加到其終端會觸發視窗更改/調整大小信號:SIGWINCH
。Apache 將此解釋為它保留要求優雅關閉的信號:容器停止。您可能應該這樣做:
- 將守護程序作為守護程序執行(否
-t
)podman run -d --name "mycontainer" --hostname "testbox" -p 8081:80/tcp docker.io/library/httpd
姓名
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#