個人的に、Dockerコンテナ内のスクリプトを外から実行したいケースがありました。
一連の処理の流れでホスト側から実行したい時などに便利なので、説明を残しておきます。
シェルスクリプトの実行例
まずは、シェルスクリプトを作成しておきます。
テキストファイルを作るだけの簡単なシェルスクリプトです。
#!/bin/bash
touch test.txt
このシェルスクリプトを、コンテナ内の/tmp
下に配置しておきます。(ファイルの実行権限も付与しておきます。)
root@1d4b4bc5782b:/tmp# ls -l
合計 4
-rwxr--r-- 1 root root 26 2月 23 16:53 make_file.sh
コンテナからexitして、ホスト側から以下のコマンドを叩いてコンテナ内のシェルスクリプトを実行します。
$ docker exec -w /tmp test_container /bin/bash -c "/tmp/make_file.sh"
コンテナ外から実行して、test.txt
が作成できていることが確認できました。
root@1d4b4bc5782b:/tmp# ls -l
合計 4
-rwxr--r-- 1 root root 26 2月 23 16:53 make_file.sh
-rw-r--r-- 1 root root 0 2月 23 17:04 test.txt
コマンドの説明
以下の形になります。
docker exec -w {コンテナ内の作業ディレクトリ} {コンテナ名} /bin/bash -c "{実行したいシェルスクリプトパス}"
-w
を使って、以下のようにコンテナ外からコンテナ内のディレクトリの中身を確認することもできます。
もちろん、その他のコマンド操作も可能です。
$ docker exec -w /tmp mng_api_local ls -l
合計 4
-rwxr--r-- 1 root root 26 2月 23 16:53 make_file.sh
-rw-r--r-- 1 root root 0 2月 23 17:04 test.txt
まとめ
以上、コンテナ外からシェルスクリプトを実行する方法に関して説明しました。
私はホスト側で叩くシェルスクリプト内で、コンテナ内のシェルスクリプトを実行したいケースで使用しました。
読んで頂いた方々の参考になっていれば幸いです。
コメント