도커 컨테이너에 있을 때 시스템이 PID 1을 얻지 못합니다.

도커 컨테이너에 있을 때 시스템이 PID 1을 얻지 못합니다.

지속적인 통합 파이프라인을 가져오려고 하는데 컨테이너 내부에 abc.deb 파일을 적절하게 설치해야 합니다.

debian/control 파일에는 다음이 포함됩니다:

Depends:  ${python3:Depends}, ${misc:Depends}, python3-webpy, systemd

debian/rules 파일에는 다음이 포함됩니다(아래에 표시된 관련 부분만 표시됨):

%:
dh $@  --with=python3,systemd

override_dh_systemd_start:
    dh_systemd_start -p<application>

override_dh_installinit:
    dh_systemd_start

내 Dockerfile은 다음과 같습니다.

FROM <relevant base image>
COPY results/*.deb /packages/
RUN export DEBIAN_FRONTEND=noninteractive  && apt-get update && \
    apt-get install -y --no-install-recommends --auto-remove \
    dumb-init \
    procps \
    /packages/*.deb && \
    apt-get autoremove -y && \
    apt-get autoclean -y && \
    rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /var/cache/apt
    CMD tail -f /dev/null

docker 내부에서 docker exec를 수행하고 ps aux를 수행하면 다음과 같은 결과를 얻습니다.

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0   2388   756 ?        Ss   11:51   0:00 /bin/sh -c tail -f /dev/null

어떻게 PID 1로 시스템화할 수 있나요? 멍청한 초기화라고 말할 수 있습니다!

여러 기사를 찾아보았지만 불가능한 것으로 보이며 동일한 기사에 대한 확인이 필요합니다. 좋은 점은 다음과 같습니다.

https://lwn.net/Articles/676831/

https://blog.phusion.nl/2015/01/20/docker-and-the-pid-1-zombie-reaping-problem/

답변1

처럼GracefulRestart주석에 언급된 대로 systemd 기본 이미지에서 빌드할 수 있습니다. 예를 들어,센토스 시스템. 그러나 도커 컨테이너 내에서 systemd를 사용하는 것은 권장되지 않습니다. 내 좀 봐관련 질문.

종속성을 충족하기 위해서만 systemd가 필요한 경우 더 좋은 방법은 다음과 같습니다.Deb 종속성 무시.

관련 정보