Linux Server

一般ユーザーでOS起動時にdocker(podman)-composeを実行させる方法

0
(0)

ルートレスでウェブサーバーと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
$

記事は以上。

この記事は役に立ちましたか? | Is this article useful for you?

評価をお願いします | Please leave your rating.

平均 | Av.: 0 / 5. 投票数 | Votes: 0

最初の評価を下さい | Please vote for the first rating.

-Linux Server
-, , ,

© 1999 - 2021 蒲田ネット