방금 컨테이너에 대해 배우기 시작했기 때문에 뭔가 빠졌거나 충분히 읽지 않았을 수 있지만 이상한 동작이 발생하여 무슨 일이 일어나고 있는지 이해하려고 노력하고 있습니다. 인터넷 검색을 시도했지만 설명을 찾을 수 없어서 개념이 누락된 것인지, 제한 사항에 부딪힌 것인지, 버그가 발생한 것인지 알 수 없습니다.
기본적으로 컨테이너에 부착하려고 하면 컨테이너가 중지됩니다.
저는 중앙 저장소에서 설치된 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
괜찮은 --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
그럼 이건 버그인가요? 그렇지 않으면 내가 뭘 잘못하고 있는 걸까요/왜 이런 일이 일어나는 걸까요? 제 지식의 공백으로 인해 이것이 어리석은 일이라면 사과드립니다. 또한 처음 연결하려고 하면 왜 소리 없이 멈추는지 잘 모르겠지만 다음 번에는 메시지가 인쇄됩니다.
오류가 있어서 인터넷 검색을 시도했는데 결과가 3개 나왔습니다. 하나는 중국어로 되어 있었고 나머지 두 개는 내 상황과 관련이 없어 보였습니다. SELinux도 끄고 /etc/selinux/config
다시 시작했지만 아무런 차이가 없었습니다.
편집: 또한 명확히 하기 위해 기본값을 사용하고 있습니다. 명령에 표시된 것 외에 Podman, 이미지 또는 컨테이너에 대해 특별한 작업을 수행하지 않습니다. cockpit
패키지도 설치했는데 아직 사용해본 적은 없습니다 .
답변1
실행 중인 프로세스를 대화형으로 제어하려고 합니다. 컨테이너가 이 -t
옵션으로 실행되므로 Apache는 데몬용이 아닌 터미널에 연결됩니다. 터미널에 연결하면 창 변경/크기 조정 신호가 트리거됩니다 SIGWINCH
. Apache는 이를 정상적인 종료를 요구하는 신호로 해석합니다. 즉, 컨테이너가 중지됩니다.
아마도 다음과 같이 해야 할 것입니다:
데몬을 데몬으로 실행(아니요
-t
)podman run -d --name "mycontainer" --hostname "testbox" -p 8081:80/tcp docker.io/library/httpd
바꾸다
podman attach
그리고podman exec
이름
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#