Pushing large docker images to container registry fails due to token expiration
Pushing docker images layers that take more the five minutes to upload result in a docker error.
Steps to reproduce:
- Try to push a docker images that takes more than five minutes to upload (due to size or network speed)
docker push x.codespring.ro/tvt/test:latest
The push refers to a repository [x.codespring.ro/tvt/test]
6ae604f0ea46: Layer already exists
95eec25cf990: Layer already exists
1a73d067d837: Layer already exists
c7a70cbff2a8: Layer already exists
435c736acff7: Layer already exists
05912f0d5493: Layer already exists
a191910774f6: Pushing [==================================================>] 2.655 GB
c2af176c706c: Layer already exists
f86dcb561e5a: Layer already exists
eb33f051084b: Layer already exists
3e907de58acd: Layer already exists
b04095771c04: Layer already exists
3d865816fc94: Layer already exists
unauthorized: authentication required
In the docker Docker Distribution log here is a error message about the expired JWT token:
time="2016-07-15T15:19:04.778133333Z" level=error msg="token not to be used before 1468595620 or after 1468595925 - currently 1468595944"
time="2016-07-15T15:19:04.778292732Z" level=warning msg="error authorizing context: invalid token" go.version=go1.6.2 http.request.host=x.codespring.ro http.request.id=c3f6f4ba-9094-4ae8-8e4d-6c91ceb1fb62 http.request.method=PATCH http.request.remoteaddr=10.10.6.183 http.request.uri="/v2/tvt/test/blobs/uploads/b5e0b165-912a-4da3-87d5-c7dd9059d9a9?_state=_R4tMeL7zlIO0HrQZ9Z_LWVwjE_DBMK8CQUb-j5keVV7Ik5hbWUiOiJ0dnQvdGVzdCIsIlVVSUQiOiJiNWUwYjE2NS05MTJhLTRkYTMtODdkNS1jN2RkOTA1OWQ5YTkiLCJPZmZzZXQiOjAsIlN0YXJ0ZWRBdCI6IjIwMTYtMDctMTVUMTU6MTM6NDUuMjczMzAyMjIzWiJ9" http.request.useragent="docker/1.12.0-rc4 go/go1.6.2 git-commit/e4a0dbc kernel/4.4.15-moby os/linux arch/amd64 UpstreamClient(Docker-Client/1.12.0-rc4 \\(darwin\\))" instance.id=e28ebae7-3ced-49e8-8425-fbe56e35a25c service=registry vars.name="tvt/test" vars.uuid=b5e0b165-912a-4da3-87d5-c7dd9059d9a9 version=v2.4.1
It seems that the token issued by GitLab is only valid for 5 minutes. The upload took 6 minutes.
GitLab v8.9.5 Docker Distribution v2.4.1