Docker 컨테이너 내에서 systemctl daemon-reload를 실행하는 방법은 무엇입니까?

Docker 컨테이너 내에서 systemctl daemon-reload를 실행하는 방법은 무엇입니까?

최근 Docker 컨테이너 내부에 사용자 정의 서비스(데몬)를 설정하려고 할 때 문제가 발생했지만 도움이 될 만한 것을 찾지 못했습니다.

상황은 다음과 같습니다. custom.service서비스의 모든 설정이 설정된 파일이 있습니다(그런데 호스트 시스템에서 완벽하게 실행됩니다). 그런 다음 서비스 파일을 /etc/systemd/system/모든 서비스 파일이 저장된 디렉터리로 옮겼습니다. 파일을 이동한 후 시스템 서비스 목록에 서비스를 추가하는 명령을 실행해야 했지만 systemctl daemon-reload(어떻게든 폴더를 다시 색인화해야 함) 바로 여기서 문제가 발생합니다.

분명히 Docker에는 아무것도 없으므로 systemctl필요한 명령을 실행하고 서비스를 시스템 서비스 목록에 추가할 수 없습니다. 실행 중이란 서비스가 시스템에 올바르게 추가되지 않았음 service custom start을 의미합니다 .custom: unrecognized service

누군가가 같은 문제를 겪었을 것이라고 확신하지만 Google은 아직 나를 도와주지 않았습니다. 어쩌면 이 문제를 해결하는 방법을 알고 계시나요? 아니면 이 명령에 대한 몇 가지 대안이 있을까요?

답변1

컨테이너 내부에서 systemd 유닛을 사용하려면 컨테이너에 systemd를 설치하고 이것이 첫 번째 프로세스인지 확인해야 합니다. 예를 들어 systemd에 의해 제어되는 Apache httpd를 실행하는 방법은 다음과 같습니다.

FROM fedora:33
ENV container docker
RUN dnf -y install httpd; dnf clean all; systemctl enable httpd
STOPSIGNAL SIGRTMIN+3
EXPOSE 80
CMD [ "/sbin/init" ]

또한 여러 볼륨이 존재하는지 확인해야 합니다.

docker run -d --tmpfs /tmp --tmpfs /run -v /sys/fs/cgroup:/sys/fs/cgroup:ro httpd

(빌드하는 이미지의 이름이 이라고 가정 httpd).

바라보다권한이 없는 컨테이너에서 systemd 실행자세한 내용을 보시거나,컨테이너에서 systemd를 실행하는 방법Podman을 사용하는 더 쉬운 방법.

시스템 단위를 사용하지 않고 컨테이너를 다시 디자인하는 것이 더 쉬울 수 있습니다.

관련 정보