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以外のツールを使う際には、注意が必要ということのようです。