Короткие: я не могу войти в мой реестр docker (размещенный на ubuntu-vm (14.04LTS) в серверном центре) извне (мой локальный компьютер работает MAC), используя имя my.domain.ch.Docker-registry v2 с tls и базовым auth за ошибкой аутентификации nginx
I может успешно войти в систему с Ubuntu-машины (VM-2) работает реестр с 'Docker входа http://localhost:5000'
Это моя установка:
VM-1: Nginx/1.10.1 на Ubuntu 14.04 действует как обратный прокси-сервер (не установлен здесь нет докер):
upstream registry {
server vm-2:5000 fail_timeout=5s;
}
server {
listen 80;
server_name my.domain.ch; # server_name ;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name my.domain.ch; # server_name ;
charset utf-8;
keepalive_timeout 5;
add_header Docker-Distribution-Api-Version registry/2.0 always;
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/key.pem;
ssl_ecdh_curve secp521r1;
ssl_protocols TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCMSHA384:ECDHE-ECDSA-AES256-SHA384:EC$
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-Original-URI $request_uri;
proxy_set_header Docker-Distribution-Api-Version registry/2.0;
proxy_set_header X-Real-IP $remote_addr;
proxy_read_timeout 900;
location/{
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/htpasswd;
proxy_pass https://registry;
}
}
VM-2 докер-реестра на Ubuntu 14.04 действует как хозяин реестра.
Docker version 1.12.1, build 23cf638
docker-compose version 1.7.0, build 0d7bf73
docker-registry version 2.5.1
Это
- /Opt/докер-реестра/аутентификации (Htaccess)
- /Opt/докер-реестра/сертификаты (ключ и сертификат)
- /Opt/докер-реестр/данные (пустые)
- /opt/docker-registry/docker-compose.yml
докер-compose.yml выглядит следующим образом:
registry:
restart: always
image: registry:2
ports:
- 5000:5000
environment:
REGISTRY_HTTP_TLS_CERTIFICATE: /certs/cert.pem
REGISTRY_HTTP_TLS_KEY: /certs/key.pem
REGISTRY_AUTH: "htpasswd"
REGISTRY_AUTH_HTPASSWD_REALM: basic-realm
REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
REGISTRY_LOG_LEVEL: "debug"
volumes:
- /opt/docker_registry/data:/var/lib/registry
- /opt/docker_registry/certs:/certs
- /opt/docker_registry/auth:/auth
С мой MAC стараюсь
docker login https://my.domain.ch
Username: MyUserName
Password:
Error response from daemon: login attempt to https://my.domain.ch/v2/ failed with status: 401 Unauthorized
Мои исследования показал мне, что:
David Daeschler писал, что докер поддерживает только базовый auth с помощью bcrypt. (Я пытался с apache-md5, md5 и crypt все не работал). Поэтому я использую bcrypt для своих htacces, как было предложено.
Мой журнал докер-реестра:
registry_1 | time="2016-09-22T10:01:00.809076941Z" level=debug msg="authorizing request" go.version=go1.6.3 http.request.host=mydomain.ch http.request.id=f1b0ccda-2d03-4480-aaf8-b7248acaed5f http.request.method=GET http.request.remoteaddr=xxx.xxx.xxx.127 http.request.uri="/v2/" http.request.useragent="docker/1.12.1 go/go1.6.3 git-commit/23cf638 kernel/4.4.20-moby os/linux arch/amd64 UpstreamClient(Docker-Client/1.12.1 \\(darwin\\))" instance.id=59b4a38a-307e-446d-9f8a-3618c35bb6bb service=registry version=v2.5.1
registry_1 | time="2016-09-22T10:01:00.811894104Z" level=error msg="error authenticating user \"MyUserName\": authentication failure" go.version=go1.6.3 http.request.host=my.domain.ch http.request.id=f1b0ccda-2d03-4480-aaf8-b7248acaed5f http.request.method=GET http.request.remoteaddr=xxx.xxx.xxx.127 http.request.uri="/v2/" http.request.useragent="docker/1.12.1 go/go1.6.3 git-commit/23cf638 kernel/4.4.20-moby os/linux arch/amd64 UpstreamClient(Docker-Client/1.12.1 \\(darwin\\))" instance.id=59b4a38a-307e-446d-9f8a-3618c35bb6bb service=registry version=v2.5.1
registry_1 | time="2016-09-22T10:01:00.812631504Z" level=warning msg="error authorizing context: basic authentication challenge for realm \"basic-realm\": authentication failure" go.version=go1.6.3 http.request.host=my.domain.ch http.request.id=f1b0ccda-2d03-4480-aaf8-b7248acaed5f http.request.method=GET http.request.remoteaddr=83.xxx.xxx.127 http.request.uri="/v2/" http.request.useragent="docker/1.12.1 go/go1.6.3 git-commit/23cf638 kernel/4.4.20-moby os/linux arch/amd64 UpstreamClient(Docker-Client/1.12.1 \\(darwin\\))" instance.id=59b4a38a-307e-446d-9f8a-3618c35bb6bb service=registry version=v2.5.1
registry_1 | xxx.xxx.xxx.11 - - [22/Sep/2016:10:01:00 +0000] "GET /v2/ HTTP/1.0" 401 87 "" "docker/1.12.1 go/go1.6.3 git-commit/23cf638 kernel/4.4.20-moby os/linux arch/amd64 UpstreamClient(Docker-Client/1.12.1 \\(darwin\\))"
Nginx-журнал:
2016/09/22 09:14:34 [crit] 13318#0: *8 crypt_r() failed (22: Invalid argument), client: xxx.xxx.xxx.127, server: my.domain.ch, request: "GET /v2/ HTTP/1.1", host: "my.domain.ch"
причина этой ошибки охватывается этим ответом from a Docker.com guy. (вкратце: Охота на это показывает, что это зависит от версии gcc, поставляемой с debian.)
То, что я знаю из журналов & ошибок:
- Он правильно направил запрос
- Порт открыт и прием запроса
- TLS работает & сертификаты правильны - он использует v2 из api
- Должно быть связано с htaccess
- Должно возникнуть проблема с nginx. Следовательно, локально он работает
Как я могу сделать nginx понимать bcrypt? Или ошибка где-то еще?
Спасибо за любую помощь SWiggels
Edit:
Found this из docker.com парень:
I'm not sure if this will help, but we've become tired of dealing with nginx's edge cases for new users, so registry 2.1 will come with htpasswd based basic auth support.
Как использовать v2.5.1 докер-реестра базовой аутентификации должен Работа.
Я установил sudo apt-get install apache2-utils
на vm-1. Я думал, что это может привести к bcrypt. Это не сработало.
При установке Bcrypt явно (sudo apt-get install bcrypt
) Я получаю bcrypt is already the newest version.
Добавление sudo apt-get install libgmp3-dev
как предложено here не работать.
Как описано here auth_basic (из nginx? Или basic auth вообще?) Не поддерживает bcrypt. Но единственным шифром, разрешенным докере-реестром, является bcrypt для htaccess-паролей.
Просмотров read here nginx не может обрабатывать хэши паролей bcrypt.
Невозможно получить док-реестр v2.5.1 за nginx 1.10.1?