ご注意下さい
この記事は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
$
記事は以上。