Podman이 컨테이너를 중지하고 컨테이너에 연결하려고 하는 이유는 무엇입니까?

Podman이 컨테이너를 중지하고 컨테이너에 연결하려고 하는 이유는 무엇입니까?

방금 컨테이너에 대해 배우기 시작했기 때문에 뭔가 빠졌거나 충분히 읽지 않았을 수 있지만 이상한 동작이 발생하여 무슨 일이 일어나고 있는지 이해하려고 노력하고 있습니다. 인터넷 검색을 시도했지만 설명을 찾을 수 없어서 개념이 누락된 것인지, 제한 사항에 부딪힌 것인지, 버그가 발생한 것인지 알 수 없습니다.

기본적으로 컨테이너에 부착하려고 하면 컨테이너가 중지됩니다.

저는 중앙 저장소에서 설치된 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# 
    

관련 정보