ご注意下さい
この記事は3年以上前に書かれた記事ですので、内容が古い可能性があります。
ルートレスでウェブサーバーとPHP-FPMを複数台起動するpodman-composeを作成したのですが、OS起動時に自動でpodman-compose upする方法についてメモっておきます。
コンテナの自動起動にはsystemdを利用します。
podman-composeを起動するユーザーで以下のファイルを作成します。
~/.config/systemd/user/www.service
[Unit]
Description=web server containers
[Service]
Restart=always
ExecStart=/home/podman/.local/bin/podman-compose -f /home/podman/.local/www/docker-compose.yaml up
ExecStop=/home/podman/.local/bin/podman-compose -f /home/podman/.local/www/docker-compose.yaml down
[Install]
WantedBy=default.target
上記の場合起動ユーザーは「podman」です。
ユーザーモードで定義ファイルのリロードを行います。
$ systemctl --user daemon-reload Failed to connect to bus: そのようなファイルやディレクトリはありません $
すると、「Failed to connect to bus」エラーとなりました。次に、~/.bashrcを編集して15行目を追加します。
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# User specific environment
if ! [[ "$PATH" =~ "$HOME/.local/bin:$HOME/bin:" ]]
then
PATH="$HOME/.local/bin:$HOME/bin:$PATH"
fi
export PATH
export XDG_RUNTIME_DIR=/run/user/`id -u`
# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=
# User specific aliases and functions
$ . .bashrc
として、XDG_RUNTIME_DIR環境変数をセットします。ところがまだ同じエラーが出ます。
調べてみると/run/user/1000が見当たりません。
$ id uid=1000(podman) gid=1000(podman) groups=1000(podman) $ cd /run/user/ $ ls 500 $
rootでpodmanユーザーに対してlingerを有効にしてやると当該ファイルが作成されます。
# loginctl enable-linger podman # cd /run/user # ls 1000 500 #
これで無事にホストOSの起動時に自動でrootlessモードで各種サーバーのコンテナが起動するようになりました。
$ systemctl --user enable www Created symlink /home/podman/.config/systemd/user/default.target.wants/www.service → /home/podman/.config/systemd/user/www.service. $ $ systemctl --user status www ● www.service - web server containers Loaded: loaded (/home/podman/.config/systemd/user/www.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2021-02-21 20:28:50 JST; 5s ago Main PID: 2993 (podman-compose) CGroup: /user.slice/user-1000.slice/user@1000.service/www.service ├─2993 /usr/bin/python3 /home/podman/.local/bin/podman-compose -f /home/podman/.local/www/docker-compose.yaml up ├─3054 podman start -a www_php-fpm_1 ├─3069 /usr/bin/fuse-overlayfs -o lowerdir=/home/podman/.local/share/containers/storage/overlay/l/N2HWUWAH6RSCB7CZGA5SHNI2J7,upperdir=/home/podman/.local/share/containe> ├─3071 /usr/bin/slirp4netns --disable-host-loopback --mtu 65520 --enable-sandbox --enable-seccomp -c -e 3 -r 4 --netns-type=path /run/user/1000/netns/cni-9672642a-1dd0-> ├─3073 containers-rootlessport ├─3083 containers-rootlessport-child ├─3097 /usr/bin/conmon --api-version 1 -c cb6ff3da3e7b91b5f9d122d59db214145ccaeb6f5c5161919fd167de31f2d534 -u cb6ff3da3e7b91b5f9d122d59db214145ccaeb6f5c5161919fd167de31> ├─3122 /usr/bin/fuse-overlayfs -o lowerdir=/home/podman/.local/share/containers/storage/overlay/l/2KJOL46P3UXFZWFJ26WUGW627D:/home/podman/.local/share/containers/storag> ├─3125 /usr/bin/conmon --api-version 1 -c 053cd3d054a019d9900818a293a50acd189e482536dcecc90a6c5b77a217adde -u 053cd3d054a019d9900818a293a50acd189e482536dcecc90a6c5b77a2> ├─3152 podman start -a www_httpd_1 ├─3166 /usr/bin/fuse-overlayfs -o lowerdir=/home/podman/.local/share/containers/storage/overlay/l/S6ZQIDDHBZSP7OASTBQRKHRZAW:/home/podman/.local/share/containers/storag> ├─3169 /usr/bin/conmon --api-version 1 -c 4a701b6ac9cbaabda3851ec96a753faf174e005868d5fbac60c5fa30b28d528f -u 4a701b6ac9cbaabda3851ec96a753faf174e005868d5fbac60c5fa30b2> ├─053cd3d054a019d9900818a293a50acd189e482536dcecc90a6c5b77a217adde │ ├─3136 php-fpm: master process (/usr/local/etc/php-fpm.conf) │ ├─3149 php-fpm: pool www │ └─3150 php-fpm: pool www ├─4a701b6ac9cbaabda3851ec96a753faf174e005868d5fbac60c5fa30b28d528f │ ├─3180 httpd -DFOREGROUND │ ├─3195 httpd -DFOREGROUND │ ├─3196 httpd -DFOREGROUND │ └─3197 httpd -DFOREGROUND └─cb6ff3da3e7b91b5f9d122d59db214145ccaeb6f5c5161919fd167de31f2d534 └─3109 /pause $ $ podman-compose ps using podman version: podman version 2.0.5 podman ps -a --filter label=io.podman.compose.project=www CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ab559e0ae3b0 localhost/www_php-fpm:latest php-fpm 18 minutes ago Up 17 minutes ago 0.0.0.0:8080->80/tcp, 0.0.0.0:8081->80/tcp, 0.0.0.0:8082->80/tcp, 0.0.0.0:8083->80/tcp, 0.0.0.0:8090->80/tcp www_php-fpm_1 c3dfff7bd966 docker.io/library/httpd:latest httpd-foreground 18 minutes ago Up 17 minutes ago 0.0.0.0:8080->80/tcp, 0.0.0.0:8081->80/tcp, 0.0.0.0:8082->80/tcp, 0.0.0.0:8083->80/tcp, 0.0.0.0:8090->80/tcp www_httpd_1 0 $ podman ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0bc18fb640da k8s.gcr.io/pause:3.2 18 minutes ago Up 18 minutes ago 0.0.0.0:8080->80/tcp, 0.0.0.0:8081->80/tcp, 0.0.0.0:8082->80/tcp, 0.0.0.0:8083->80/tcp, 0.0.0.0:8090->80/tcp e4cd38857da7-infra ab559e0ae3b0 localhost/www_php-fpm:latest php-fpm 18 minutes ago Up 18 minutes ago 0.0.0.0:8080->80/tcp, 0.0.0.0:8081->80/tcp, 0.0.0.0:8082->80/tcp, 0.0.0.0:8083->80/tcp, 0.0.0.0:8090->80/tcp www_php-fpm_1 c3dfff7bd966 docker.io/library/httpd:latest httpd-foreground 18 minutes ago Up 18 minutes ago 0.0.0.0:8080->80/tcp, 0.0.0.0:8081->80/tcp, 0.0.0.0:8082->80/tcp, 0.0.0.0:8083->80/tcp, 0.0.0.0:8090->80/tcp www_httpd_1 $
記事は以上。