
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
達成run
したいと思います。
それでも動作しない場合は、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
これでstartを使用できますが、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