使用私有 svn+bower 在 dockerfile 中不起作用
Using private svn+bower doesn't work in dockerfile
我一直在尝试使用 docker 到 运行 我的开发环境。
我的堆栈有一个私有的 Bower 注册表,在我的 $HOME
.
中需要一个 .bowerrc
我的 .bowerrc 文件的格式是:
/home/.bowerrc(在我的 docker 内安装为卷)
{
"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 && \
npm config set prefix '/home/dev/.npm-global' && \
npm install -g bower gulp && \
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 && 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)
谁能帮我理解一下?
这可能与您的 docker 和主机之间的用户 ID 差异有关。所以它导致 docker 无法读取登录所需的文件。
要知道您在主机上的用户 ID (UID) docker 运行:id -u $USER
如果它们不同,我会重新构建映像并在 docker 映像中创建一个用户,如下所示:useradd -u 999 USERNAME
其中 999 必须是拥有您托管的凭据的用户的 UID机,用户名可以不同。
希望能解决您的问题,此致!
终于明白问题所在了
SVN 证书应该在 docker 容器中被接受。
为此,在 docker 容器内,使用交互附加模式 -ia
进入并使用 /bin/bash
控制台的入口点,我 运行 这个命令:
svn info <any_svn_respository_of_my_company>
例子
svn info https://svn.mycompany.com/repos/ui/common/
.
然后我接受了证书,一切正常!
我一直在尝试使用 docker 到 运行 我的开发环境。
我的堆栈有一个私有的 Bower 注册表,在我的 $HOME
.
.bowerrc
我的 .bowerrc 文件的格式是:
/home/.bowerrc(在我的 docker 内安装为卷)
{
"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 && \
npm config set prefix '/home/dev/.npm-global' && \
npm install -g bower gulp && \
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 && 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)
谁能帮我理解一下?
这可能与您的 docker 和主机之间的用户 ID 差异有关。所以它导致 docker 无法读取登录所需的文件。
要知道您在主机上的用户 ID (UID) docker 运行:id -u $USER
如果它们不同,我会重新构建映像并在 docker 映像中创建一个用户,如下所示:useradd -u 999 USERNAME
其中 999 必须是拥有您托管的凭据的用户的 UID机,用户名可以不同。
希望能解决您的问题,此致!
终于明白问题所在了
SVN 证书应该在 docker 容器中被接受。
为此,在 docker 容器内,使用交互附加模式 -ia
进入并使用 /bin/bash
控制台的入口点,我 运行 这个命令:
svn info <any_svn_respository_of_my_company>
例子
svn info https://svn.mycompany.com/repos/ui/common/
.
然后我接受了证书,一切正常!