2016-11-18 6 views
4

Я пытающегося запустить bower install внутри Docker контейнера, переданного в качестве команды в docker-compose.ymlИспользование беседку внутри Docker контейнера с зависимостью частного репо

Соответствующий код в docker-compose.yml:

services: 
    assets: 
    build: ./src 
    command: > 
     sh -c ' 
     bower install --allow-root; 
     ' 

bower.json имеет следующую зависимость:

{ 
    "name": "projectname", 
    "version": "version", 
    "dependencies": { 
    "remote-repo": "ssh://[email protected]/repo.git#branch" 
    } 
} 

Это дистанционное репо является закрытым. Хост-машина имеет правильные учетные данные SSH, чтобы вытащить с этого пульта.

Я попытался передачи учетных данных SSH из моего хозяина машины в контейнер Docker 4 или 5 различных способов, но все попытки Сетки меня то же самое сообщение об ошибке:

docker_1 | bower repo#branch   ECMDERR Failed to execute "git 
ls-remote --tags --heads ssh://[email protected]/repo.git", exit code 
of #128 Host key verification failed. fatal: Could not read from 
remote repository. Please make sure you have the correct access 
rights and the repository exists. 

Когда я exec непосредственно в контейнер, и попытка git clone, он спрашивает меня, могу ли я добавить пульт к known_hosts, а затем он запрашивает мою кодовую фразу для моего ssh-ключа (как ожидается при первой попытке подключения к удаленному компьютеру).

я последовал за шагами в этой реакции StackOverflow, чтобы попытаться обойти подсказку: https://stackoverflow.com/a/23411161/4736263

И даже зашел так далеко, чтобы бросить все на него через SSH, что я мог, добавив эти шаги к моему Dockerfile под RUN команды: https://serverfault.com/questions/132970/can-i-automatically-add-a-new-host-to-known-hosts/316100#316100

Как она стоит сейчас, мой скрипт установки (который работает docker-compose up, между прочим), включает в себя строку:

cp $HOME/.ssh/id_rsa src/id_rsa 

И я подтвердил, что id_rsa копируются правильно в каталог, где Dockerfile является (в частности, src в моем приложении)

И мой Dockerfile содержит это:

# Make ssh dir 
RUN mkdir /root/.ssh/ 

# Copy over private key, and set permissions 
ADD id_rsa /root/.ssh/id_rsa 

# Create known_hosts 
RUN touch /root/.ssh/known_hosts 

# Add remote's key 
RUN ssh-keygen -R remoterepo.url 
RUN ssh-keygen -R remoterepoIP 
RUN ssh-keygen -R remoterepo.url,remoterepoIP 
RUN ssh-keyscan -H remoterepo.url,remoterepoIP >> /root/.ssh/known_hosts 
RUN ssh-keyscan -H remoterepoIP >> /root/.ssh/known_hosts 
RUN ssh-keyscan -H remoterepo.url >> /root/.ssh/known_hosts 

Есть ли способ, чтобы получить беседку внутри Docker контейнера для получения доступа к частное дистанционное репо? Я чувствую, что я пробовал все (и я делал разные вещи всю неделю).

ответ

0

Единственный способ это конфигурация, кажется, работает это:

1) Создание только для чтения, ключ для контейнера Docker в частном репо
2) Оденьте только для чтения кредитки и known_hosts в репо в каталог с Dockerfile
3) Настройка разрешений на id_rsa файл

Я попытался настройки разрешения на скопированные-из-хоста учетных данных, но все-таки дал разрешение отказано ошибка. Единственный способ решить этот вопрос - создать специальный ключ для чтения только для нашего частного репо только для этого контейнера.

Это на самом деле не решает начальную проблему, но она дает нам то место, где мы должны быть. Наша реализация заключается в .gitignore учетных данных и передает их другим пользователям, что предотвращает сохранение секретов в репо.

Я принял команду копирования из нашей установки скрипта, поэтому конечный результат в Dockerfile здесь:

# Make ssh dir 
RUN mkdir /root/.ssh/ 

# Copy over private key, and set permissions 
COPY id_rsa /root/.ssh/id_rsa 
COPY known_hosts /root/.ssh/known_hosts 
RUN chmod 600 /root/.ssh/id_rsa 

и закрытый ключ живет в том же каталоге, Dockerfile.

Я подозреваю, что проблема по-прежнему заключается в необходимости поставить ключевую фразу в - есть дите комментарий к статье предварительного StackOverflow с 2014, что говорит, что это: can't use a passphrase protected one apparently

Надеюсь, это поможет кому-то.