2016-04-11 2 views
1

Когда я пытаюсь построить или запустить Docker контейнер, например:Docker на окнах - ошибка сертификата

docker build -t docker.example.com/research/example_project .

Это приводит к следующей ошибке:

Sending build context to Docker daemon 6.513 MB 
Step 1 : FROM docker.example.com/research/example_project:latest 
unable to ping registry endpoint https://docker.example.com/v0/ 
v2 ping attempt failed with error: Get https://docker.example.com/v2/: x509: certificate signed by unknown authority 
v1 ping attempt failed with error: Get https://docker.example.com/v1/_ping: x509: certificate signed by unknown authority 

Все обходной я нашел на Google для ubuntu, но этот случай - когда докер работает на окнах 8 (установлена ​​виртуальная машина).

+0

Возможно, есть глупый вопрос, но существует https://docker.example.com/v2/ registry, и вы можете пройти аутентификацию в реестре? – lvthillo

+1

Я получил решение. Пришлось добавить реестр в список незащищенных реестра. – xavi

+0

@xavi, не могли бы вы объяснить, что вы подразумеваете под «Пришлось добавить реестр в небезопасный список реестра»? Таким образом, вы можете помочь другим с той же проблемой. – VME

ответ

0

Если вы используете докер-версию до версии 1.12 для Windows (тот, который использует VirtualBox с Boot2Docker), вам необходимо добавить свой реестр на виртуальную машину Boot2Docker. Из вашего Docker окна консоли, введите:

$ docker-machine ssh default 
$ DOMAIN_NAME=<type your domain name here>:5000 
$ sudo mkdir -p /etc/docker/certs.d/$DOMAIN_NAME 
$ sudo vi /etc/docker/certs.d/$DOMAIN_NAME/ca.crt 

--> then copy certificate text in there and save (type :wq) 

Следующим шагом является создание сценария, который добавляет сертификат в список разрешенных сертификатов:

$ sudo touch /var/lib/boot2docker/bootlocal.sh && sudo chmod +x /var/lib/boot2docker/bootlocal.sh 
$ sudo vi /var/lib/boot2docker/bootlocal.sh 

Затем заполнить в «Ваше доменное имя» переменной ниже, и вставьте этот скрипт в файл, который вы только что создали:

#!/bin/bash 
CA_CERTS_DIR=/usr/local/share/ca-certificates 
DOCKER_CERTS_DOMAIN_DIR=/etc/docker/certs.d/<your domain name> 
CERTS_DIR=/etc/ssl/certs 
CAFILE=${CERTS_DIR}/ca-certificates.crt 

cp ${DOCKER_CERTS_DOMAIN_DIR}/ca.crt ${CA_CERTS_DIR} 


for cert in $(/bin/ls -1 ${DOCKER_CERTS_DOMAIN_DIR}); do 
SRC_CERT_FILE=${CA_CERTS_DIR}/${cert} 
CERT_FILE=${CERTS_DIR}/${cert} 
HASH_FILE=${CERTS_DIR}/$(/usr/local/bin/openssl x509 -noout -hash -in ${SRC_CERT_FILE} 2>/dev/null) 

[ ! -L ${CERT_FILE} ] && /bin/ln -fs ${SRC_CERT_FILE} ${CERT_FILE} 

for idx in $(/usr/bin/seq 0 9); do 
if [ -L ${HASH_FILE}.${idx} ]; then 
[ "$(/usr/bin/readlink ${HASH_FILE}.${idx})" = "${SRC_CERT_FILE}" ] && break 
else 
/bin/ln -fs ${SRC_CERT_FILE} ${HASH_FILE}.${idx} 
break 
fi 
done 
/bin/cat ${SRC_CERT_FILE} >> ${CAFILE} 
done 
0

Если вы работаете в Docker> = 1,12 для Windows (тот, который работает родной и использует Hyper-V вместо VirtualBox), вы можете добавить адрес хоста вашего реестра как «небезопасный реестр» в конфигурацию демона Docker:

Щелкните правой кнопкой мыши значок «Докер» на панели задач -> «Настройки» ... -> нажмите вкладку «Docker Daemon» -> изменить линия

"insecure-registries": [ 
    ], 

в

"insecure-registries": [ 
"your.domain.com:5000" 
    ], 

Это позволила мне получить доступ к моему личному реестру еще раз, используя новый докер для Windows. Вероятно, работает и для Mac, но не тестировался.

Смежные вопросы