Я размещаю свой собственный докер-реестр в докер-контейнере. На него работает nginx, работающий в отдельном контейнере, чтобы добавить базовую аутентификацию. Проверяя маршруты _ping, я вижу, что nginx правильно выполняет маршрутизацию. При вызове docker login
из boot2docker (в Mac OSX) я получаю такую ошибку:
FATA [0003] Ошибка, ответ от демона: недопустимая конечная точка реестра https://www.example.com:8080/v1/: получить https://www.example.com:8080/v1/_ping: x509: сертификат, подписанный неизвестным органом. Если этот частный реестр поддерживает только HTTP или HTTPS с неизвестным сертификатом CA, добавьте
--insecure-registry www.example.com:8080
к аргументам демона. В случае HTTPS, если у вас есть доступ к сертификату CA реестра, флаг не нужен; просто поместите сертификат CA по адресу /etc/docker/certs.d/www.example.com:8080/ca.crt
Что странно, потому что это действующий сертификат CA SSL. Я пробовал добавить --insecure-registry
в EXTRA-ARGS согласно этим инструкциям: https://github.com/boot2docker/boot2docker#insecure-registry, но изначально файл «профиля» не существует. Если я его создам и добавлю
EXTRA_ARGS="--insecure-registry www.example.com:8080"
Я не вижу улучшений. Я хотел изолировать пример и поэтому попробовал docker login
с виртуальной машины ubuntu (не boot2docker). Теперь у меня другая ошибка:
Error response from daemon:
Реестр докеров запускается непосредственно из общедоступного хаба, например
docker run -d -p 5000:5000 registry
(Обратите внимание, что nginx маршрутизирует с 8080 на 5000). Любая помощь и / или ресурсы, помогающие отладить это, были бы очень признательны.
ОБНОВЛЕНИЕ
Я искал руководство, которое поможет комплексно решить эту проблему. Конкретно:
- Создать частный реестр
- Защитите реестр с помощью базовой аутентификации
- Используйте реестр из boot2docker
Я создал реестр и протестировал локально, он работает. Я защитил реестр с помощью nginx, добавив базовую аутентификацию.
Проблема в том, что теперь реестр используется двумя типами клиентов:
1) Клиент, отличный от boot2docker. Один из ответов ниже помог в этом. Я добавил флаг --insecure-registry к параметрам в / etc / default / docker, и теперь я могу разговаривать с моим удаленным реестром докеров. Однако это несовместимо с аутентификацией, поскольку при входе в докер возникает ошибка:
2015/01/15 21:33:57 HTTP code 401, Docker will not send auth headers over HTTP.
Итак, если я хочу использовать аутентификацию, мне нужно будет использовать HTTPS. У меня уже есть этот сервер, обслуживающий HTTPS, но это не сработает, если я установлю --insecure-registry. Похоже, есть проблема с доверием к сертификату, которую я уверен, что смогу решить на не-boot2docker, но ...
2) Для клиента boot2docker я не могу заставить работать --insecure-registry или доверять сертификатам?
ОБНОВЛЕНИЕ 2
После этого вопроса обмена стеками I удалось добавить CA в мою виртуальную машину ubuntu, и теперь я могу использовать его из клиента, отличного от boot2docker. Тем не менее, есть еще много странного поведения.
Несмотря на то, что мой текущий пользователь является членом группы докеров (поэтому мне не нужно использовать sudo), мне теперь нужно использовать sudo, иначе я получаю следующую ошибку при попытке войти или вытащить из моего личного реестра em>
user@ubuntu:~$ docker login example.com:8080
WARNING: open /home/parallels/.dockercfg: permission denied
parallels@ubuntu:~$ docker pull example.com:8080/hw:1
WARNING: open /home/parallels/.dockercfg: permission denied
И при первом запуске контейнеров, извлеченных из моего личного реестра, я должен указывать их по идентификатору изображения, а не по имени.
docker run -d -p 5000:5000 registry:2
. Однако это немного другое, поэтому стоит посмотреть документы docs.docker.com/registry/deploying и вам нужно будет использовать клиентов v1.6. - person Adrian Mouat   schedule 10.06.2015