Docker + Nodejs + Private Repo + Private NPM Module - Проблемы с доступом

Я настраиваю развертывание службы Node.js с помощью Docker.

Dockerfile, который у меня есть, собран из различных примеров из сети. Каталог для Dockerfile включает:

  • Dockerfile
  • id_rsa
  • start.sh

Это Dockerfile:

FROM ubuntu:13.10

# make sure apt is up to date
RUN apt-get update

# install npm, git, ssh, curl
RUN apt-get install -y npm git git-core ssh curl

RUN mkdir /nodejs && curl http://nodejs.org/dist/v0.10.31/node-v0.10.31-linux-x64.tar.gz | tar xvzf - -C /nodejs --strip-components=1

# Fixes empty home
ENV PATH $PATH:/nodejs/bin

ENV HOME /root

# SSH SETUP
RUN mkdir -p /root/.ssh
ADD id_rsa /root/.ssh/id_rsa
RUN chmod 700 /root/.ssh/id_rsa
RUN echo "IdentityFile /root/.ssh/id_rsa" >> /root/.ssh/ssh_config
RUN ssh-keyscan github.com >> /root/.ssh/known_hosts

ADD start.sh /tmp/

RUN chmod +x /tmp/start.sh

CMD ./tmp/start.sh

После завершения настройки запускается start.sh, и у меня возникают проблемы с частной зависимостью NPM, которая есть у частной службы Node.js. Вот что делает start.sh:

cd /tmp

# try to remove the repo if it already exists
rm -rf MediaFX; true

git clone https://<username>:<password>@github.com/company/ExampleRepo.git

cd RepoName

node --version

ls

npm install

NODE_ENV=test DEBUG=* PORT=3000 node server.js

В package.json для ExampleRepo есть один частный модуль, который мы импортируем следующим образом:

"dependencies": {
    "scribe": "git+ssh://[email protected]:Company/PrivateDep.git"
},

Когда npm install попадает в это репо, он выводит следующие журналы:

npm ERR! git clone [email protected]:InboxAppCo/scribe.git Cloning into bare repository '/root/.npm/_git-remotes/git-github-com-InboxAppCo-scribe-git-abae334a'...
npm ERR! git clone [email protected]:InboxAppCo/scribe.git
npm ERR! git clone [email protected]:InboxAppCo/scribe.git Warning: Permanently added the RSA host key for IP address '192.30.252.130' to the list of known hosts.
npm ERR! git clone [email protected]:InboxAppCo/scribe.git Permission denied (publickey).
npm ERR! git clone [email protected]:InboxAppCo/scribe.git fatal: Could not read from remote repository.
npm ERR! git clone [email protected]:InboxAppCo/scribe.git
npm ERR! git clone [email protected]:InboxAppCo/scribe.git Please make sure you have the correct access rights
npm ERR! git clone [email protected]:InboxAppCo/scribe.git and the repository exists.
npm ERR! Error: `git "clone" "--mirror" "[email protected]:InboxAppCo/scribe.git" "/root/.npm/_git-remotes/git-github-com-InboxAppCo-scribe-git-abae334a"` failed with 128
npm ERR!     at ChildProcess.cpclosed (/usr/share/npm/lib/utils/exec.js:59:20)
npm ERR!     at ChildProcess.EventEmitter.emit (events.js:98:17)
npm ERR!     at Process.ChildProcess._handle.onexit (child_process.js:789:12)
npm ERR! If you need help, you may report this log at:
npm ERR!     <http://bugs.debian.org/npm>
npm ERR! or use
npm ERR!     reportbug --attach /tmp/MediaFX/npm-debug.log npm

npm ERR! System Linux 3.16.4-tinycore64
npm ERR! command "/usr/bin/nodejs" "/usr/bin/npm" "install"
npm ERR! cwd /tmp/MediaFX
npm ERR! node -v v0.10.15
npm ERR! npm -v 1.2.18

Я думал, что, поскольку git clone частной службы Node работает нормально, любая из ее частных зависимостей NPM установится без проблем.

Я вполне уверен, что мой SSH настроен некорректно (и что он не проявил себя во время клонирования репозитория частных родителей с помощью git), потому что я добавил в ссылку имя пользователя и пароль. Однако я не уверен и был бы признателен за некоторые советы о том, как это сделать правильно.


person Jorge Olivero    schedule 07.11.2014    source источник
comment
Во-первых, вам понадобятся пакеты openssh и ca-certificate. Кроме того, попробуйте запустить свой контейнер в интерактивном режиме и пройти через все, чтобы разобраться в этих вещах. docker run -it ‹container› / bin / bash   -  person user2105103    schedule 07.11.2014


Ответы (2)


git clone https://<username>:<password>@github.com/company/ExampleRepo.git

Работает, потому что вы передаете username и password и делаете это через https

"dependencies": {
    "scribe": "git+ssh://[email protected]:Company/PrivateDep.git"
},

Ошибка, потому что вы подключаетесь напрямую через ssh, а Docker не выполняет ssh agent пересылку с хост-машины.

К сожалению, не похоже, что npm поддерживает любой формат URL-адресов для отправки имени пользователя и пароля, например строки клона: https://docs.npmjs.com/files/package.json#git-urls-as-dependencies

Вам нужно будет добавить свои ssh-ключи в контейнер докеров (не рекомендуется)

Или сделайте что-нибудь забавное, например, поделитесь SSH_SOCKET с хоста, например:

https://gist.github.com/d11wtq/8699521

person kevzettler    schedule 27.12.2014

Вот подход, который я попробую реализовать сегодня вечером:

docker create --build-arg TOKEN <my priv token> <dockerFile>

может быть, объявить аргумент в файле докеров?

ARG TOKEN  

затем в сценарии укажите npm install, чтобы использовать этот ТОКЕН в зависимостях

"privModule": "git+https://${TOKEN}:[email protected]/<githubID>/<privateModule>.git"

и если это не сработает, каким-то образом замените этот var в package.json (на sed) или попросите npm использовать переменную окружения.

person Mark Essel    schedule 25.04.2016