当我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 不会启动您的容器。你想用start
orrun
来实现这个目的。
如果尽管如此它仍然无法工作,则您的容器可能在您能够运行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