[Docker] Failed to get D-Bus connection: Operation not permitted
dockerfile을 실행해 container를 run 하고 서비스를 실행하려고 하면 에러가 난다.
#dockerfile 실행
[minggu92@cloud dockerfiles]$ docker run -it dockerfile_test:1.0 /bin/bash
#유저변경
[root@a81f33368378 /]# su - minggu1
#sshd 서비스 상태 확인
[minggu1@a81f33368378 ~]$ systemctl status sshd
Failed to get D-Bus connection: Operation not permitted
[minggu1@a81f33368378 ~]$ sudo systemctl status sshd
Failed to get D-Bus connection: Operation not permitted
1. docker 명령어 해결
docker container는 기본적으로 Unprivileged모드로 실행되며 이상태에서는 시스템 주요자원에 접근할 수 있는 권한이 부족하기 때문에 --privileged옵션을 주어야한다.
-d옵션을 사용하면 컨테이너가 detached 모드에서 실행되며 이 모드가 없을 때 Ctrl + C로 빠져나오면 컨테이너는 종료된다.
systemctl 명령어를 사용하려면 /sbin/init을 사용한다.
대신 해당 명령어로 실행시키면 attach 대신 docker exec -it [service] bash로 접근해야 한다.
#docker 실행
[minggu92@cloud dockerfiles]$ docker run --privileged -p 1002:22 -d --name minggu1_ssh dockerfile_test:1.0 /sbin/init
d45e8fc8ba2c821eccea71d0ca00316f7f9fa621e8d4f10b433cab8def6b413c
[minggu92@skylark_dev dockerfiles]# docker exec -it minggu1_ssh /bin/bash
[root@d45e8fc8ba2c /]# su - minggu1
[minggu1@d45e8fc8ba2c ~]$ systemctl status sshd
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2022-03-22 04:16:54 UTC; 13s ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 92 (sshd)
CGroup: /docker/d45e8fc8ba2c821eccea71d0ca00316f7f9fa621e8d4f10b433cab8def6b413c/system.slice/sshd.service
└─92 /usr/sbin/sshd -D
‣ 92 /usr/sbin/sshd -D
[minggu1@d45e8fc8ba2c ~]$
2. Dockerfile에 ENTRYPOINT 추가
# 1. pull OS image (centos or ubuntu)
# format : FROM [image]:[tag]
FROM centos:7
# FROM ubuntu:18.04
# 2. 메타데이터 표시
LABEL "purpose"="ssh_test"
LABEL "author"="minggu"
ENV USER minggu1
# 3. 업데이트 및 네트워크 환경설정
#RUN ["[command]", "[parameter1]", "[parameter2]" ...]
# -y 명령어를 빼먹으면 도커 실행이 안된다. 반드시 yes 하자.
RUN yum -y update && yum -y install ntsysv initscripts net-tools sudo openssh-server openssh-clients openssh-askpass
RUN mkdir /var/run/sshd
# 4. minggu1유저에게 sudo 권한 생성
RUN sed -ri '20a'$USER' ALL=(ALL) NOPASSWD:ALL' /etc/sudoers
# 5. .ssh 생성 및 권한주기
RUN useradd -m $USER
RUN mkdir /home/$USER/.ssh
RUN chown $USER.$USER /home/$USER/.ssh
RUN chmod 700 /home/$USER/.ssh
#6. 패스워드 설정
RUN echo 'root:root' | chpasswd
RUN echo $USER':test' | chpasswd
# 7. Generate Keys & 포트 22번 노출 지정
RUN ssh-keygen -q -N "" -t rsa -f /etc/ssh/ssh_host_rsa_key
RUN ssh-keygen -q -N "" -t rsa -f /root/.ssh/id_rsa
RUN cp /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys
EXPOSE 22
#ENTRYPOINT로 미리 명령어 실행할 수 있지만 도커 실행할 때 설정하는걸로
ENTRYPOINT["/sbin/init", "systemctl start sshd", "systemctl enable sshd"]
# 8. CMD : 컨테이너 생성시 시작명령어
#CMD ["[command]", "[parameter1]", "[parameter2]" ...]
#CMD ["[parameter1]", "[parameter2" ...]
#CMD <전체커맨드>
CMD ["/usr/sbin/sshd", "-D"]
<참고>
https://blog.naver.com/alice_k106/220395077738
'Server & Infra' 카테고리의 다른 글
[Docker] docker-compose 사용 (Compose V2) (0) | 2022.03.28 |
---|---|
[Docker] wildfly Dockerfile을 이용한 Container 생성 (+Admin) (0) | 2022.03.25 |
[Docker] Dockerfile생성, 그리고 build 하기 (ssh컨테이너용) (0) | 2022.03.22 |
[Docker] docker container commit, push (0) | 2022.03.21 |
[Docker] docker container ssh 설치 및 접속 (0) | 2022.03.17 |