このチュートリアルでは、このエラーが何を意味するのか、なぜ発生するのか、Docker の使用においてどのように解決するのかを学びます。
Docker のイメージ参照とは何ですか?
Docker では、イメージ参照は、Docker レジストリ (Docker Hub) またはローカル Docker ホスト内で特定の Docker イメージを識別して検索する方法を指します。
デフォルトでは、イメージ参照は 2 つの主要コンポーネントで構成されます。
リポジトリ – 最初の部分では、ターゲット イメージのリポジトリを定義します。これは、Docker イメージの最上位の組織単位であり、主にイメージを管理する組織または個人を表すために使用されます。たとえば、Microsoft/SQL-server という名前のイメージが見つかります。この場合、最初の部分はイメージを維持する組織を表します。
タグ – イメージの 2 番目の部分は、リポジトリ内のイメージの特定のバージョンまたはバリアントに関連付けられたラベルです。イメージ タグは、同じイメージの異なるバージョン、異なるリリース、または異なる互換性を表すことができます。たとえば、nginx:latest のイメージでは、latest タグが Nginx イメージの最新バージョンを指します。
Dockerfile または docker コマンドでイメージを指定する場合、イメージ名は次の命名規則に従う必要があります。
- リポジトリ名は小文字にする必要があります。
- リポジトリには、レジストリ内の編成またはグループ化を示す文字、数字、ハイフン (-)、アンダースコア (_)、またはスラッシュ (/) を含めることもできます。
- イメージ名には空白文字 (スペースまたはタブ) を含めないでください。
Docker の無効な参照形式
Dockerfile または Docker コマンドの実行時に「無効な参照形式」エラーが発生した場合は、名前が上記のルールに従っていないことを意味します。
例を次に示します。
$ ドッカープル BusyBox上記のコマンドを実行すると、次のようなエラーが返されます。
無効 参照 形式: リポジトリ名は小文字である必要があります
この場合、イメージ名は常に小文字である必要があるため、イメージ名の形式が正しくないことがわかります。
Docker の無効な参照形式エラーを修正する方法
ご想像のとおり、最初の方法は、画像参照形式が正しいことを確認することです。これには、イメージ名が有効であることの確認が含まれます。
たとえば、上記のコマンドでは、次のようにイメージ名を指定することでエラーを修正できます。
$ 須藤 docker pull ビジーボックス:最新
この場合、コマンドは Busybox イメージの最新バージョンをプルする必要があります。
方法 2 – 長い Docker コマンドを分割する
また、長い Docker コマンドを実行すると、「無効な参照形式」エラーが発生する場合もあります。
このような場合、コマンドを複数行に分割することをお勧めします。コマンドの分割方法はシェルとシステムによって異なります。
- ただし、Bash シェルの場合は、複数行のエスケープ文字またはバックスラッシュ (\) を使用します。
- PowerShell の場合は、バックティック文字 (`) を使用できます。
- 最後に、コマンド プロンプトを使用している場合は、キャレット文字を ^ として使用できます。
たとえば、Bash では次のようにコマンドを実行します。
$ 須藤 ドッカービルド \-それ \
ビジーボックス \
しー
PowerShell では、次のようにコマンドを実行できます。
$ 須藤 ドッカービルド `-それ `
ビジーボックス `
しー
最後に、コマンド プロンプトを使用している場合は、次のようにコマンドを使用します。
$ 須藤 ドッカービルド ^-それ ^
ビジーボックス ^
しー
方法 3 – ${pwd} AND $(pwd) パス
このエラーのもう 1 つの一般的な原因は、${pwd} 変数の使用時です。これにより、コマンドを実行しているシェルの種類によっては競合が発生する可能性があります。
PowerShell の場合、$(pwd) の代わりに ${pwd} 変数を使用する必要があります。
ご想像のとおり、Bash の場合は、$(pwd) のように中かっこで囲まれた入力の代わりにかっこ形式を使用します。
結論
この投稿では、Dockerfile または docker コマンドを使用するときに「無効な参照形式」が発生する主な原因について説明しました。また、この問題を解決するために使用できる 3 つの主な方法についても検討しました。