Dockerのサービスが起動した後に特定のコンテナを起動させたいと思ったので方法を検討してみました。MacかLinuxで動作すると思います。未検証ですがWIndowsの場合はWSL2のUbuntu上で設定すると動作するかもしれません。
参考
https://superuser.com/questions/1315050/run-shell-script-after-docker-daemon-starts
スクリプトファイルを用意する
$HOME/docker_startup.sh
に以下の内容のファイルを用意する。
#!/bin/bash
# 3分経過するか、dockerが起動するまでループする
TMP_COUNT=0
until docker version > /dev/null 2>&1 || [ ${TMP_COUNT} -eq 180 ]; do
sleep 1
TMP_COUNT=$((TMP_COUNT + 1))
done
# dockerが起動した後に実行される処理
#
# 例えば以下のコマンドを記述することでログイン時にportainerのコンテナを起動、もしくは作成する。
#
if [ "$(docker ps -qf name=portainer -f status=exited)" ]; then
# コンテナが既に作成済みの場合はstartで起動
docker start portainer
elif [ ! "$(docker ps -aqf name=portainer)" ]; then
# コンテナが無い場合は新しく作成
docker run \
--detach \
--publish 8000:8000 \
--publish 9000:9000 \
--name portainer \
--restart always \
--volume /var/run/docker.sock:/var/run/docker.sock \
--volume portainer_setting_data:/data \
portainer/portainer-ce
fi
# 上記で作成したコンテナとボリュームは下記のコマンドで削除可能
# docker stop $(docker ps -aqf "name=portainer") && docker rm $(docker ps -aqf "name=portainer") && docker volume rm portainer_setting_data
ファイルに実行権限を持たせる
起動時に実行出来るように実行権限をもたせます。Permission denied
エラーが表示される場合は、700を705等にしてみてください。
chmod 700 $HOME/docker_startup.sh
ログイン時に実行させる
UbuntuのGUIの場合は~/.profile
に以下の内容を追記。他Linuxの場合は~/.bash_profile
に追記、MacはCatalinaより新しいOSの場合、~/.zshrc
に追記する。その他環境によってはログイン時に実行されるファイルが違うので注意して設定してください。
/bin/bash $HOME/docker_startup.sh