docker push: всегда получаю ошибку authentication required
я делаю свой приватный docker registry.
Для начала я просто поднял его в докере, как написано на их сайте.
docker run -d -p 5000:5000 --restart=always --name registry registry:2
Попробовал - всё локально работает.
Начал навешивать аутентификацию.
Нашел довольно понятную статью и "краткий ответ на вопрос" на стековерфлоу.
скомпилировалв, получил команду для запуска такого docker registry
docker run -d \
-p 5000:5000 \
--restart=always \
--name registry \
-v /DData/auth:/auth \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
registry:2
при этом я заранее создал файл паролей в /DData/auth командой
htpasswd -Bc htpasswd konst
Потом я начинаю пробовать команду docker login
, получаю "по башке" загадочнейшим сообщением "Message: Remote error from secret service:"
Читаю про config.json
, выхожу на тред на cтековерфлоу и у меня срабатывает магия (а по другому это назвать нельзя)
sudo apt install gnupg2 pass
- и после этого docker загадочным образом начинает логиниться!
для справки: я залез в файл ~/.docker/config.json
и увидел, что там засейвлен какой то пароль, скоре всего, мой:
{
"auths": {
"docker.junecat.ru": {
"auth": "a29uc3*********ZmGF1bX43"
}
}
}
Потом я начинаю химичить с nginx'ом:
создаю виртуальный хост, настраиваю nginx в режиме proxy при помощи такого конфига:
# config for Docker
server {
server_name docker.junecat.ru www.docker.junecat.ru;
location / {
#auth_basic "Administrator’s Area";
#auth_basic_user_file /etc/nginx/htpasswd;
proxy_redirect http://192.168.0.10:5000/ /;
proxy_pass_header Server;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Scheme $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_connect_timeout 5;
proxy_read_timeout 240;
proxy_intercept_errors on;
proxy_pass http://192.168.0.10:5000/;
client_max_body_size 5000M;
}
}
получаю на него lentsencrypt'овский сертификат
sudo certbot --nginx -d docker.junecat.ru -d www.docker.junecat.ru
Казалось бы, всё хорошо: снаружи по запросу
https://docker.junecat.ru/v2/_catalog
я сначала получаю запрос на base auth, а потом, когад аутентификация проведена, вижу пустой список образов:
{"repositories":[]}
Но в само конце меня поджидает большой облом:
я беру hello-world образ, тэгаю его для заливки на свой сервер
docker run hello-world
docker tag hello-world docker.junecat.ru/hello-world
и пытаюсь залить (перед этим я сделал docker login и у меня аутентификация - сохранена)
docker push docker.junecat.ru/hello-world
получаю ошибку authentication required
и всегда, на любую попытку заливки я получаю эту ошибку.
Никакого продвижения после копания в сети.
я уже убил на это чертову уйму времени, и хотел бы довести дело до конца.
Нет и у кого то предположений, как это можно победить?
Заранее большое спасибо!
Дополнение
Самое смешное. Жить то как то надо... взял инструкцию с сайта DO, который я вобще то нежно люблю. Сделал по инструкции, не думая, вроде бы, то же саое. Работает!
Не могу понять пока что, где же я в первый раз накосячил... разве что nginx по разному сконфигурирован?