Docker 상의 CentOS라면 자작 systemd가 움직이지 않을 때의 대응 방법

어떤 상황이라면! ?


  • CentOS에서 정기 실행을 실현하기 위해 systemd를 자작하고 싶다.
  • 실기의 CentOS라고 자작 systemd가 움직이는데, Docker상의 CentOS라고 왠지 안 된다.
  • 구체적으로는 Docker상이라면 아래와 같은 에러로 넘어간다.

  • System has not been booted with systemd as init system (PID 1). Can't operate.
    Failed to connect to bus: Host is down

    나는 이런 환경에서 일하고있다.



    이 기사는 아래 그림과 같이 Windows10의 Docker Desktop을 인스톨 완료되어, Docker-compose 빠짐없이 세트로 인스톨 되고 있는 전제가 됩니다.


    먼저 docker-compose.yml을 새로 작성



    어딘가의 폴더에 docker-compose.yml이라는 설정 파일이 있는 것은 아닙니다.
    또한 docker-compose.yml을 넣는 곳은 어디서나 괜찮습니다.

    Docker 초보자이므로 'docker-compose.yml은 설정 파일 어디에 있니? 어디에 넣어야 돼? 』 라고 우왕좌왕하고 있었습니다…(´・ω・`)

    docker-compose.yml ≒ 컨테이너 작성 절차서(지시서)라고 파악하면 좋을까~라고 생각합니다.

    그래서 이번에는 'C:\Users\waokitsune\centos8_systemd_test'라는 폴더에 docker-compose.yml을 작성해 보았습니다.

    docker-compose.yml의 내용



    참고 사이트씨 을 참조했습니다.
    (centos라는 이미지는 이미 존재하는 전제 yml입니다.)
    version: "3.8"
    services:
      centos8_systemd_test:
        image: centos
        volumes:
          - /sys/fs/cgroup:/sys/fs/cgroup:ro
        cap_add:
          - SYS_ADMIN
        command: /sbin/init
    

    PowerShell로 Docker-compose에 yml을 먹이게 한다



    PowerShell을 시작하고 먼저 docker-compose가있는 곳으로 이동 ...
    cd C:\Users\waokitsune\centos8_systemd_test
    

    docker-compose 명령으로 컨테이너 생성.
    docker-compose up -d
    

    성공하면 이런 느낌.


    yml을 먹여 만든 컨테이너를 사용하십시오.



    Docker Desktop 대시보드 열고 단말기 시작!
    아… 어쩐지 두통이 아픈 것 같은 컨테이너명이 되어버리고 있네요… (´・ω・`)


    먼저 ps aux에서 프로세스를 살펴 보겠습니다.
    어쩐지 갈 수 있을 것 같은 생각이 듭니다.



    덧붙여서 자작 systemd가 움직이지 않았던 컨테이너의 ps aux 결과는 이쪽.


    텍스트 파일 작성 루트 바로 아래에 쉘 스크립트 파일 'zoi.sh'를 작성하십시오.

    zoi.sh
    #!/usr/bin/bash
    touch /zoizoi.txt
    

    만든 쉘 스크립트 파일에 실행 권한을 부여합니다.
    chmod 755 /zoi.sh
    

    그런 다음/etc/systemd/system 폴더에 zoi.service 파일을 만듭니다.
    만든 쉘 스크립트를 킥하는 것만 큼 간단한 녀석입니다.

    zoi.service
    [Unit]
    Description=kyoumoitinitigannbaruzoi
    
    [Service]
    Type=simple
    ExecStart=/zoi.sh
    
    [Install]
    WantedBy=multi-user.target
    

    준비가 되었으므로 'zoi.service'를 시작해 보겠습니다.
    systemctl start zoi.service
    

    오류없이 종료 된 것 같습니다.

    사실인가? 정말 그럴까~?systemctl status zoi.service 에서 확인.

    화이트 마루이므로 정상 종료 같습니다.
    (쉘 스크립트에 실행 권한 부여 잊어서 서비스 기동한 흔적이 있는 것은 모아이 교애경)
    ls / 하지만 확인.

    쉘 스크립트가 텍스트 파일을 작성합니다.

    좋아.

    무사히 Docker의 CentOS에서 자작 systemd를 움직일 수있었습니다.

    뱀발



    docker-compose.yml이 있으면 '정확히 같은 환경을 다시 만든다'를 쉽게 할 수있어 편리하다고 생각했습니다.

    참고 사이트씨



    버전



    Windows10 Pro 버전 1909 OS 빌드 19042.630
    Docker Desktop:2.5.0.1(49550) Engine:19.03.13 Compose:1.27.4
    PSVersion 5.1.19041.610
    CentOS Linux release 8.2.2004 (Core)

    좋은 웹페이지 즐겨찾기