Dockerイメージ構築中のパースエラーを解決する方法
概要
docker buildコマンドを実行する際に発生するエラーについて、解決方法を紹介します。
環境
- Docker version 20.10.21
問題の発生
Dockerでコンテナを作る際に利用するイメージを作る方法のひとつに、docker buildコマンドがあります。しかし、このコマンドを実行した際に、次のようなエラーメッセージが表示され、実行に失敗しました。
Sending build context to Docker daemon 63.67MB
Error response from daemon: dockerfile parse error line 8: Unknown flag: link
エラーメッセージを確認すると、8行目にある"link"という文字列に問題があるようです。しかしこのDockerfileは、他の環境で正常に動作していたため、記述内容に問題はないはずです。
色々と調べてみると、この問題はDockerfileに問題はなく、利用するdockerの環境に問題がありました。
解決方法
調べてみると、この問題はDockerfileにはなく、Dockerの環境に問題があったと分かりました。
私が利用していたDocker環境は、Rancher Desktopでした。この環境ではイメージ構築の際に利用されるBuildKitがデフォルトで無効化されています。BuildKitは、イメージ構築に利用される機能の拡張を行うもので、今回のDockerfileにはこのBuildKitの機能を利用していたことが、問題が発生した原因でした。
BuildKit でイメージ構築 — Docker-docs-ja 20.10 ドキュメント
そのため、BuildKitを有効にしてイメージを構築することで、問題を解決できます。BuildKitの有効化、無効化は環境変数を利用して行います。以下のようにコマンドを実行します。
DOCKER_BUILDKIT=1 docker build .
これで、イメージのビルドに成功しました。なお、BuildKitを常時有効化する場合は、Dockerの設定ファイルに次の内容を記述します。
{ "features": { "buildkit": true } }
環境変数で設定可能なので、BuildKitを有効化するために、コマンドを次のようにします。
これで、イメージのビルドに成功しました。
他にも、/etc/docker/daemon.json
などのDockerの設定ファイルに次の内容を記述することでも設定可能です。こちらの場合は、常時有効化するものになります。
さいごに
Rancher Desktopではなく、Docker Desktopを使っていたときには、このようなエラーは発生しませんでした。やはりDocker Desktop以外のツールを使う際には、注意が必要ということのようです。