はじめに
こんにちは、icemint0828です。
今回はdockerコンテナで引数としてホスト上のファイルを指定する方法を紹介します。
※自作パッケージをdockerイメージとして公開する際にハマりました。
動作環境
dockerが動作する環境
やりたいこと
ホスト上では以下のように実行していたコマンドをdockerコンテナにシングルバイナリとして持たせて実行したい時があります。
$ imgedit reverse srcImage.png
dockerコンテナ上で以下のように実行したいです。
# scratchはシングルバイナリを扱うためのベースイメージです。
FROM scratch
ADD imgedit /usr/bin/imgedit
ENTRYPOINT ["imgedit"]
$ docker run ghcr.io/icemint0828/imgedit:latest reverse srcImage.png
このコマンドを実行するとdockerコンテナ上にはsrcImage.png
のファイルが存在しないため、実行エラーとなっていまします。
共有ボリュームを使用し、docker内でのワーキングディレクトリを変更する事で、ホスト上のファイルやディレクトリを扱う事が出来ます。
# scratchはシングルバイナリを扱うためのベースイメージです。
FROM scratch
ADD imgedit /usr/bin/imgedit
WORKDIR /mnt
ENTRYPOINT ["imgedit"]
$ docker run --rm -v $(pwd):/mnt ghcr.io/icemint0828/imgedit:latest reverse srcImage.png
カレントディレクトリをdockerコンテナ内の/mnt
として共有ボリュームに指定する事で、ホスト上のファイルを引数として渡す事が出来ました。
また、このコマンドでは実行時に画像ファイルの出力も行っており、ホスト上のカレントディレクトリに対してファイル出力もされました。
(参考)動作確認用パッケージ
- icemint0828/imgedit
goで作成した画像変換用のパッケージです。
おわりに
簡単な内容とはなりますが、dockerコンテナで引数としてホスト上のファイルを指定する方法させて頂きました。
最後まで読んで頂き、ありがとうございました。