컨테이너는 systemd를 실행합니다. systemd를 사용하는 스크립트를 실행하는 가장 쉬운 방법은 무엇입니까?
Nov 14 2020
systemd를 실행하는 컨테이너가 있습니다. 다음의 설정 지침은 다음에서 찾을 수 있습니다.
이제 install.sh
위에서 만든 기본 이미지를 통해 빌드 단계에서 실행해야하는 스크립트 가 있습니다. 문제는 시스템이 install.sh
인식한다는 것입니다.
그래서 systemd의 init를 실행하는 가장 쉬운 방법 install.sh
은 무엇입니까? 내가 원하는 것은 다음과 같습니다.
buildah run $ctr -- sh /tmp/install.sh
그러나 이것은 내가 요구하는대로 systemd에서 실행 되지 않습니다install.sh
.
답변
RedaSalih Nov 14 2020 at 06:04
나는 buildah를 사용하여 동일한 시스템 이미지를 빌드하고 간단한 스크립트를 실행하려고했는데 잘 작동합니다. 어쩌면 내가 뭔가를 놓치고 있습니다.
buildah run -t -v /sys/fs/cgroup:/sys/fs/cgroup:ro onbuild-image-working-container-2 sh -c 'cat /tmp/install.sh'
--> #!/bin/bash
--> echo lol
buildah run -t -v /sys/fs/cgroup:/sys/fs/cgroup:ro onbuild-image-working-container-2 sh -c 'chmod 777 /tmp/install.sh && /tmp/install.sh'
--> lol
출력 : ㅋㅋ
마지막 코멘트 이후 : 여기서 도커 사용
BUILDAH 는 OCI 이미지 를 빌드하기위한 것이므로 병렬 podman 또는 docker 에서 사용 하는 경우 Dockerfile 에서 systemd-image 를 빌드 한 후 buildah 를 사용하여 이미지를 로컬 레지스트리 로 푸시하고 / sys / fs /에 / sys / fs / cgroup을 마운트하십시오. 읽기 전용 옵션이있는 cgroup 이므로 systemd cgroup을 재정의하지 않습니다.
buildah bud --format=docker -f Dockerfile -t onbuild-image <path_to_DockerFile>
docker run -d -p 5000:5000 --restart=always --name registry registry:2
buildah push --tls-verify=false onbuild-image docker://localhost:5000/systemd-centos:latest
docker pull localhost:5000/systemd-centos:latest
ctr1="$(docker run -d -v /sys/fs/cgroup:/sys/fs/cgroup:ro -p 8000:80 localhost:5000/systemd-centos)"
docker exec -it $ctr1 'systemctl'