LoginSignup
0
0

More than 1 year has passed since last update.

Dockerが起動した後に実行させるスクリプト

Posted at

Dockerのサービスが起動した後に特定のコンテナを起動させたいと思ったので方法を検討してみました。MacかLinuxで動作すると思います。未検証ですがWIndowsの場合はWSL2のUbuntu上で設定すると動作するかもしれません。

参考
https://superuser.com/questions/1315050/run-shell-script-after-docker-daemon-starts

スクリプトファイルを用意する

参考
https://leico.github.io/TechnicalNote/Mac/catalina-zsh

$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

ログイン時に実行させる

https://itiut.hatenablog.com/entry/2013/07/07/114143

UbuntuのGUIの場合は~/.profileに以下の内容を追記。他Linuxの場合は~/.bash_profileに追記、MacはCatalinaより新しいOSの場合、~/.zshrcに追記する。その他環境によってはログイン時に実行されるファイルが違うので注意して設定してください。

/bin/bash $HOME/docker_startup.sh
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0