centos 7
도커 허브에서 도커 이미지를 다운로드했습니다 . 서버에서 sshd를 활성화하려고 하면 ssh 서비스를 활성화할 수 없습니다.
내 문제를 재현하는 단계는 다음과 같습니다.
docker pull centos
docker run -i -d --name testSSH centos /bin/bash
docker exec -it testSSH /bin/bash
centos 상자에 들어간 후 다음 명령을 실행했습니다.
yum install openssh-server
ssh-keygen
ssh-keygen -t rsa
yum install -y initscripts
service start sshd
service sshd start
이제 다음 오류 메시지가 나타납니다.
[root@f9e4d1efcfd9 /]# service sshd start
Redirecting to /bin/systemctl start sshd.service
Failed to get D-Bus connection: Operation not permitted
나는 물리적인 centos 머신을 사용했고 동일한 명령이 잘 실행되었습니다.
답변1
CentOS의 현재 공식 Docker 이미지에는 이 기능이 포함되어 있지만 systemd
기본적으로 비활성화되어 있습니다. 이 내용은 다음과 같이 기록됩니다.CentOS 이미지용 Docker 허브 페이지.
Systemd는 이제 centos:7 및 centos:latest 기본 컨테이너에 포함되지만 기본적으로 활성화되지는 않습니다. systemd를 사용하려면 다음 Dockerfile 예시와 유사한 텍스트를 포함해야 합니다.
제공되는 샘플 Dockerfile은 다음과 같습니다.
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/*;
VOLUME [ "/sys/fs/cgroup" ]
CMD ["/usr/sbin/init"]
이러한 파일을 제거하면 systemd
컨테이너 시작 중에 여러 서비스가 시작되는 것을 방지할 수 있습니다. 이 접근 방식을 사용하면 간단하면서도 systemd
완벽하게 작동하는 컨테이너가 생성됩니다.
cgroup
이 이미지에서 컨테이너를 실행하려면 볼륨을 마운트하기 위한 특정 옵션도 필요합니다 .
$ docker run -it -v /sys/fs/cgroup:/sys/fs/cgroup:ro systemd-app
옵션 -v
바인드는 /sys/fs/cgroup
호스트에서 컨테이너로 디렉토리를 읽기 전용으로 마운트합니다.
또한 Ubuntu 호스트에서 컨테이너가 제대로 작동하려면 추가 옵션이 필요할 수 있습니다.
$ docker run -it -v /sys/fs/cgroup:/sys/fs/cgroup:ro -v /tmp/$(mktemp -d):/run systemd-app
참고: Dockerfile 자체를 포함한 대부분의 자료는 Daniel Walsh의 다음 블로그 게시물에서 가져온 것으로 보입니다.Docker 컨테이너에서 systemd 실행.