--- title: Windows で docker login / docker push に認証エラーで失敗する tags: Docker author: chiepomme slide: false --- # はじめに Windows 環境で `docker login` や `docker push` しようとしたらこんなエラーが出ました。 ``` $ docker login Username: myusername Password: Email: my@mail.address Error response from daemon: Unexpected status code [403] :

403 Forbidden

Request forbidden by administrative rules. ``` はじめは認証エラーなのでパスワードなどが間違っているのかと思ったのですが、調べてみたところそもそも接続先が間違っているようです。 # 対策 こちらの feedback に解決方法が書いてありました。 [DockerToolbox in windows Login/push doesnt works properly (With a workaround) · Issue #473 · docker/hub-feedback](https://github.com/docker/hub-feedback/issues/473) 手元で試した感じだと windows 用のレジストリである `https://registry-win-tp3.docker.io/` が v2 の API に対応していないようで、デフォルトの接続先のままだとうまく動かないということみたいです。 まず、ログインは `docker.io` を明示的に指定します。 ``` $ docker login docker.io Username: myusername Password: Email: my@mail.address WARNING: login credentials saved in C:\Users\MyUserName\.docker\config.json Login Succeeded ``` そうすると上記の `config.json` に以下のような認証情報が出力されます。 ```json { "auths": { "docker.io": { "auth": "TOKEN", "email": "my@mail.address" } } } ``` それをコピーして push 先となる `https://registry-win-tp3.docker.io/v1/` にも適用させます。どちらも同じトークンで大丈夫です。(`"docker.io"` 最後の `,` を忘れずに) ```json { "auths": { "docker.io": { "auth": "TOKEN", "email": "my@mail.address" }, "https://registry-win-tp3.docker.io/v1/": { "auth": "TOKEN", "email": "my@mail.address" } } } ``` これで `docker push chiepomme/chiepomme` のようにレジストリ指定なしでも push できました。 # おわりに Windows 環境での Docker 罠が多すぎてやばい。 この記事は [@chiepomme Advent Calender 2015](http://www.adventar.org/calendars/1213) 10日目です。