📖 1 dakika ↪ Yazılar

Systemctl in Docker

--privileged argümanı tercih edilmediği durumlarda gereken mountlar aşağıdaki şekildedir.

Systemd ile docker çalıştırmak için gereken mountlar aşağıdaki gibi ayarlanabilir. Ayrıca imajdan önce mount edilen noktalarda DISPLAY environment değişkeni ayarlanarak container içerisinde çalıştırılan GUI içerisindeki pencereler görülebilir. Aynı zamanda ana dizinde bulunan Share dizini de konteynır içerisinden erişilebilir.

Sadece GUI uygulamaları görüntüleyebilmek için aşağıdaki şekilde container çalıştıralabilir.

docker run -ti -v /tmp/.X11-unix:/tmp/.X11-unix -v $XAUTHORITY:/root/.Xauthority -e DISPLAY archlinux:latest bash

Systemd:

docker run \
      --entrypoint=/usr/lib/systemd/systemd \
      --env container=docker \
      --mount type=bind,source=/sys/fs/cgroup,target=/sys/fs/cgroup \
      --mount type=bind,source=/sys/fs/fuse,target=/sys/fs/fuse \
      --mount type=tmpfs,destination=/tmp \
      --mount type=tmpfs,destination=/run \
      --mount type=tmpfs,destination=/run/lock \
      --net=host --name=Arch --workdir /root -ti \
      --env="DISPLAY" --volume="$HOME/.Xauthority:/root/.Xauthority:rw" -v="$HOME/Share:/root/Share" \
      archlinux:latest --log-level=info --unit=sysinit.target

Daha sonrasında terminali kapatıp istenilen komut docker exec -ti Arch bash ile interaktif shell alınabilir. Sonrasında systemctl status ile systemd interaksiyonlarına girilebildiği görülecektir.

Containeri kapatmak için docker stop Arch yapmak yerine container içerisinde shutdown now yapmayı unutmamalı :)