Linux 명령 "systemctl status"가 Docker 컨테이너 내에서 작동하지 않습니다.

Linux 명령 "systemctl status"가 Docker 컨테이너 내에서 작동하지 않습니다.

이 명령은 systemctl status효과가 없습니다. 한 번도 없었습니다. 내 컨테이너는 CentOS 7에 있습니다. 질문을 하면 systemctl status결과가 나온다Failed to get D-Bus connection: operation not permitted.

반품

  1. 그런 다음 systemd 업그레이드를 고려했습니다. 파일 을 삭제했습니다 /etc/yum/protected.d/system.conf. 그런 다음 yum remove systemd.systemd 버전 219-19.el7_2.4가 설치된 것을 확인했습니다. 나는 N실제로 systemd를 제거하지 않기로 결정했습니다. 그런 다음 systemd-libs-219-19.el7_2.7.x86_64.rpm을 설치했습니다. 그런 다음 systemd 버전 2.7을 설치했습니다. 그런 다음 yum remove systemd버전을 확인하는 데 사용합니다. systemd 버전 219-19.el7_2.7이 설치된 것을 확인했습니다. 삭제를 중단하기 로 선택했습니다 NO. systemctl 상태가 여전히 작동하지 않습니다. 같은 오류가 발생했습니다.Failed to get D-Bus connection: operation not permitted.
  2. -privileged이 플래그를 사용하여 새 Docker 컨테이너를 만들어 보았습니다 . 이 옵션을 사용하면 -p 80:80Docker 실행 명령이 실패합니다.
  3. -p 80:80명령에서 옵션을 생략하면 docker run새 컨테이너에서도 동일한 문제가 발생합니다 .
  4. " 옵션을 사용하여 Docker 컨테이너를 만들었습니다 docker run ... -v /sys/fs/cgroup:/sys/fs/cgroup:ro. 또한 동일한 문제에 직면했습니다.

systemctl statusDocker 컨테이너 내부에서 작업 하고 싶습니다 .

systemctl statusDocker 컨테이너에서 작업 하려면 어떻게 해야 하나요 ?

답변1

CentOS:7 Docker 컨테이너에서 이 문제를 성공적으로 해결했습니다. 나의 주요 관심사는CentOS Docker 이미지 프로젝트 가이드.

FROM centos:7

ENV container docker
RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \
systemd-tmpfiles-setup.service ] || rm -f $i; done); \
rm -f /lib/systemd/system/multi-user.target.wants/*;\
rm -f /etc/systemd/system/*.wants/*;\
rm -f /lib/systemd/system/local-fs.target.wants/*; \
rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
rm -f /lib/systemd/system/basic.target.wants/*;\
rm -f /lib/systemd/system/anaconda.target.wants/*;

# Install anything. The service you want to start must be a SystemD service.

CMD ["/usr/sbin/init"]

이제 이미지를 빌드하고 최소한 다음 명령 매개변수를 사용하여 실행합니다 docker run.-v /run -v /sys/fs/cgroup:/sys/fs/cgroup:ro

그렇다면 핵심은 /usr/sbin/initDocker 컨테이너의 첫 번째 프로세스여야 한다는 것입니다.

/usr/sbin/init따라서 실행하기 전에 일부 명령을 실행하는 사용자 정의 스크립트를 사용하려면 exec /usr/sbin/init스크립트 끝에서 (bash 스크립트에서) 시작하십시오.

예는 다음과 같습니다.

ADD cmd.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/cmd.sh

CMD ["/usr/local/bin/cmd.sh"]

내용은 다음과 같습니다 cmd.sh.

#!/bin/bash

# Do some stuffs

exec /usr/sbin/init # To correctly start D-Bus thanks to https://forums.docker.com/t/any-simple-and-safe-way-to-start-services-on-centos7-systemd/5695/8

System is booting up. See pam_nologin(8)PAM 시스템을 사용하는 경우 이 특정 오류를 생성하는 파일을 /usr/lib/tmpfiles.d/systemd-nologin.conf생성하므로 파일을 삭제할 수 있습니다.Dockerfile/var/run/nologin

답변2

다음과 같이 docker를 실행하십시오. 이것은 나에게 효과적이었습니다.

docker run -it --privileged -p 10081:80 centos7 /bin/bash

관련 정보