容器中使用systemd加载服务并注入env参数
客户希望在容器中,是用systemd做1号进程,从而让容器方案和裸机方案对齐。
mkdir -p /data/systemd
cd /data/systemd
cat << 'EOF' > service.sh
#!/bin/bash
# Import our environment variables from systemd
for e in $(tr "\000" "\n" < /proc/1/environ); do
# if [[ $e == DEMO_ENV* ]]; then
eval "export $e"
# fi
done
echo $DEMO_ENV_NIC > /demo.txt
echo $DEMO_ENV_IP >> /demo.txt
echo $DEMO_ENV_MASK >> /demo.txt
EOF
cat << EOF > vbbu.service
[Unit]
Description=vBBU Server
After=network.target
[Service]
Type=forking
User=root
WorkingDirectory=/root/
ExecStart=/service.sh
[Install]
WantedBy=multi-user.target
EOF
cat << EOF > ./vbbu.dockerfile
FROM docker.io/rockylinux/rockylinux:8
USER root
COPY service.sh /service.sh
RUN chmod +x /service.sh
COPY vbbu.service /etc/systemd/system/vbbu.service
RUN systemctl enable vbbu.service
entrypoint ["/usr/sbin/init"]
EOF
buildah bud -t quay.io/wangzheng422/qimgs:systemd -f vbbu.dockerfile .
podman run --rm \
--env DEMO_ENV_NIC=eth1 \
--env DEMO_ENV_IP=192.168.100.22 \
--env DEMO_ENV_MASK=24 \
quay.io/wangzheng422/qimgs:systemd
podman exec -it `podman ps | grep systemd | awk '{print $1}'` bash