docker push
を実行するとき、または画像をプルするときに、画像名にレジストリサーバがあるかどうか、またはデフォルトのレジストリ(Docker Hubなど)のパス/ユーザ名がDockerによってどのように判断されますか?ドッカーイメージ名はどのように解析されますか?
私は1.1 image specから次のことを見ている:
タグ
は、タグは任意の単一のイメージ IDに記述、ユーザーが指定した名前をマッピングするのに役立ちます。タグ値は文字セット[a-zA-Z_0-9]に制限されています。
リポジトリ
:)の前に共通のプレフィックス(名前コンポーネント の下にグループ化されたタグのコレクション。たとえば、my-app:3.1.4という名前でタグ付けされた画像では、 my-appは名前のリポジトリコンポーネントです。リポジトリ名は、スラッシュで区切られた名前コンポーネントで構成された で、オプションで接頭辞は のDNSホスト名です。ホスト名は、標準DNS規則の に従う必要がありますが、_文字は使用できません。ホスト名が存在する場合は、 の後にオプションで8080の形式のポート番号を続けることができます。名前 には、小文字、数字、および区切り文字を使用できます。 A セパレータは、ピリオド、1つまたは2つのアンダースコア、または1つまたは のダッシュとして定義されます。名前コンポーネントはセパレータで開始または終了できません。
DNSホスト名の場合はドットで完全修飾する必要がありますか、「my-local-server」は有効なレジストリホスト名ですか?名前のコンポーネントについては、ピリオドが有効であることがわかります。これは、「team.user/appserver」が有効なイメージ名であることを意味します。レジストリサーバがポート80で動作しているため、イメージ名のホスト名にポート番号が必要ない場合は、ホスト名とレジストリサーバのパスのあいまいさがあるようです。私はDockerがそのあいまいさをどのように解決するのか不思議です。
です。だから私は、タグの正規表現は/[\w][\w.-]{0,126}/ –
でなければならないと思う正規表現の長さは0から127文字ですので、そうだと思います。そうでなければ、それはこれを変更するためのPRになります:https://github.com/docker/distribution/blob/master/reference/regexp.go#L37 – BMitch
これは私がそれを理解する方法です....正規表現が始まります[/w][\w.-]{0,127}であり、|間に [ ]。だからそれはa/wにマッチすることを意味し、127 \ wまたはドットやハイフンにマッチします。 Rubyのirbに/by([\w][\w.-]{0,4})$/.match('ssss- ')を入力すると、その5文字が消費されることが確認されます。 –