容器处于运行状态意味着什么?

容器处于运行状态意味着什么?

当我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

答案1

create      Create but do not start a container
exec        Run a process in a running container

Exec 不会启动您的容器。你想用startorrun来实现这个目的。

如果尽管如此它仍然无法工作,则您的容器可能在您能够运行exec命令之前崩溃或退出。如果您的主进程退出,您的容器也会退出,另请参阅:https://stackoverflow.com/a/28214133/2519977

作为一个最小的测试,您可能想尝试:

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

答案2

;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

相关内容