Использование частного svn bower не работает в dockerfile

#svn #docker #bower

#svn #docker #bower

Вопрос:

Я пытался использовать docker для запуска моей среды разработки. В моем стеке есть частный реестр bower, который нуждается .bowerrc в моем $HOME .

Формат моего файла .bowerrc это:

/home/.bowerrc (внутри моего докера, установленного как том)

 {
  "registry": "https://<user>:<password>@bower.mycompany.com",
  "timeout": 300000,
  "strict-ssl": false
}
 

Способ монтирования этого файла в моем файле docker заключался в использовании этой команды:

 docker run -it --net='host' -v $(pwd):/home/dev/app -v /home/USER/.dockershared/.bowerrc:/home/.bowerrc --name="myproject" --privileged bower-gulp:node0.12
 

Мой Dockerfile был создан для поддержки среды, использующей bower, gulp и svn. Это Dockerfile

 FROM node:0.12-wheezy
RUN useradd -ms /bin/bash dev
RUN chown -R dev:dev /home/dev
USER dev
ENV HOME /home/dev
ENV PATH "$PATH:/home/dev/.npm-global/bin"
WORKDIR /home/dev/app

RUN mkdir /home/dev/.npm-global amp;amp; 
    npm config set prefix '/home/dev/.npm-global' amp;amp; 
    npm install -g bower gulp amp;amp; 
    apt-get install subversion

ENTRYPOINT ["/bin/sh", "-c", "/bin/bash"]
 

Мой package.json файл, использующий bower install команду, выглядит следующим образом:

 {
    "name": "my_project",
    "version": "3.1.3",
    "description": "",
    "author": "",
    "license": "ISC",
    "repository": {
        "type": "svn",
        "url": "https://svn.mycompany.com/repos/My_repo"
    },
    "devDependencies": {
        "bower": "1.x",
        "del": "^2.2.0",
        "gulp": "3.x",
        "gulp-maven-deploy": "^0.2.0",
        "gulp-rename": "^1.2.2",
        "gulp-template": "^3.1.0",
        "node-rest-client": "^1.8.0",
        "run-sequence": "^1.1.5",
        "svn-npm-crutch": "0.x"
    },
    "svnDependencies": {
        "framework-tools-build": "https://svn.mycompany.com/repos/tools/build/trunk",
        "framework-tools-functional-testing": "https://svn.mycompany.com/repos/tools/functional-testing/trunk"

    },
    "engines": {
        "node": ">=0.8.0"
    },
    "scripts": {
        "install": "bower install -F --allow-root amp;amp; node ./node_modules/svn-npm-crutch/lib/svn-npm-crutch.js",
        "demo-mode": "gulp functional-test --browser=chrome --demo"
    },
    "config": {
        "unsafe-perm": true
    }
}
 

Наконец, когда я пытаюсь npm install или bower install получаю эту ошибку:

 bower ECMDERR       Failed to execute "svn list https://svn.mycompany.com/repos/ui/common/tags --verbose --non-interactive", exit code of #1 svn: OPTIONS of 'https://svn.mycompany.com/repos/ui/common/tags': authorization failed: Could not authenticate to server: rejected Basic challenge (https://svn.mycompany.com)

Additional error details:
svn: OPTIONS of 'https://svn.mycompany.com/repos/ui/common/tags': authorization failed: Could not authenticate to server: rejected Basic challenge (https://svn.mycompany.com)
 

Кто-нибудь может помочь мне понять это?

Комментарии:

1. Вам нужно сделать что-нибудь особенное для входа в SVN?

2. Нет, только установите моего пользователя и пароль в моем .bowerrc файле. Когда я пытаюсь это сделать на своем хост-компьютере, это работает нормально, но внутри моего контейнера docker нет = (

3. Глупый вопрос, вы уверены --net='host' , что правильно использовать одинарные кавычки? Я никогда не использую его с кавычками. Действительно ли контейнер использует сетевой стек хоста?

4. @Grif-fin наконец-то я это исправил. спасибо за ваши комментарии.

Ответ №1:

Наконец-то я понял проблему.

Сертификат SVN должен быть принят внутри контейнера docker. Для этого внутри контейнера docker, войдя в режим интерактивного подключения -ia и используя точку входа в /bin/bash консоль, я выполнил эту команду:

svn info <any_svn_respository_of_my_company>

пример

svn info https://svn.mycompany.com/repos/ui/common/ .

Затем я принял сертификат, и все работает нормально!

Ответ №2:

Это может быть связано с различием идентификаторов пользователей между вашим docker и вашим хост-компьютером. Таким образом, это приводит к тому, что docker не может прочитать файлы, необходимые для входа в систему.

Чтобы узнать ваш идентификатор пользователя (UID), запустите хост и docker: id -u $USER

Если они разные, я бы перестроил образ и создал пользователя внутри образа docker следующим образом: useradd -u 999 USERNAME где 999 должен быть UID пользователя, которому принадлежат ваши учетные данные с вашего хост-компьютера, имя пользователя может отличаться.

Надеюсь, это решит вашу проблему, с уважением!

Комментарии:

1. когда я пытаюсь это сделать, сборка образа застревает.

2. Я попробовал на своей машине, и все прошло нормально. Я пытался RUN useradd -ms /bin/bash -u 1001 dev .