Container

容器處於執行狀態意味著什麼?

  • November 22, 2020

當我podman create接著執行時podman exec,我被告知我的容器狀態沒有執行,

$ ctr=$(podman create alpine:3)
dc63e5975a918485b3d6a0ddf90576213b02d00e15fd84bab97732cf6d1f885a
$ podman exec -ti $ctr /bin/sh
Error: can only create exec sessions on running containers: container state improper

沒有執行狀態的容器意味著什麼?有沒有辦法在容器上設置狀態,即使我啟動了容器,它似乎podman exec也不起作用。

$ podman start $ctr
dc63e5975a918485b3d6a0ddf90576213b02d00e15fd84bab97732cf6d1f885a
$ podman exec -ti $ctr /bin/sh
Error: can only create exec sessions on running containers: container state improper

;tldr:如果容器內部的程序正在執行,則容器正在“執行”。只有當Created容器啟動並且狀態為Up


如果您創建一個podman create狀態為的容器Created

$ podman create alpine:3
d02b4e268fd4bb4a816852efd2e032069402474237e7bea6b3708b0319e9c318

$ podman container ls -a
CONTAINER ID  IMAGE                            COMMAND         CREATED             STATUS                        PORTS                   NAMES
d02b4e268fd4  docker.io/library/alpine:latest  /bin/sh         8 seconds ago       Created                                               exciting_hofstadter

現在,你可以從這個開始podman start,但它不會停留在那個狀態,它會立即退出,

$ podman start d02b4e268fd4
d02b4e268fd4
$ podman container ls -a
CONTAINER ID  IMAGE                            COMMAND         CREATED             STATUS                        PORTS                   NAMES
d02b4e268fd4  docker.io/library/alpine:latest  /bin/sh         21 seconds ago      Exited (0) 5 seconds ago                              exciting_hofstadter

這裡的解決方案是在其中有一個長時間執行的程序,

# status created
$ podman create -ti alpine:3 /bin/sh

現在狀態是Up

CONTAINER ID  IMAGE                            COMMAND         CREATED             STATUS                        PORTS                   NAMES
cefa530172e3  docker.io/library/alpine:latest  /bin/sh         About a minute ago  Up 25 seconds ago                                     musing_cohen

現在你可以exec在裡面,

$ podman exec cefa530172e3 /bin/echo "Hello World"
Hello World
create      Create but do not start a container
exec        Run a process in a running container

Exec 不會啟動您的容器。你想使用startrun為此。

如果它仍然無法工作,那麼您的容器可能在您能夠執行exec命令之前崩潰或退出。如果您的主程序退出,您的容器也會這樣做,另請參閱:https ://stackoverflow.com/a/28214133/2519977

作為最低限度的測試,您可能想嘗試:

ctr=$(podman create alpine:3)
podman run -d -it $ctr /bin/sh

引用自:https://unix.stackexchange.com/questions/620884