gpt4 book ai didi

node.js - Docker + Nodejs + Private Repo + Private NPM Module - 访问问题

转载 作者:IT老高 更新时间:2023-10-28 21:25:47 24 4
gpt4 key购买 nike

我正在使用 Docker 设置 Node.js 服务的部署。

我拥有的 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 运行,我遇到了私有(private) Node.js 服务所具有的私有(private) NPM 依赖项的问题。这就是 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

在 ExampleRepo 的 package.json 中,我们导入了一个私有(private)模块,如下所示:

"dependencies": {
"scribe": "git+ssh://git@github.com:Company/PrivateDep.git"
},

当 npm install 到达这个 repo 时,它会输出这些日志:

npm ERR! git clone git@github.com:InboxAppCo/scribe.git Cloning into bare repository '/root/.npm/_git-remotes/git-github-com-InboxAppCo-scribe-git-abae334a'...
npm ERR! git clone git@github.com:InboxAppCo/scribe.git
npm ERR! git clone git@github.com: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 git@github.com:InboxAppCo/scribe.git Permission denied (publickey).
npm ERR! git clone git@github.com:InboxAppCo/scribe.git fatal: Could not read from remote repository.
npm ERR! git clone git@github.com:InboxAppCo/scribe.git
npm ERR! git clone git@github.com:InboxAppCo/scribe.git Please make sure you have the correct access rights
npm ERR! git clone git@github.com:InboxAppCo/scribe.git and the repository exists.
npm ERR! Error: `git "clone" "--mirror" "git@github.com: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

我认为由于私有(private) Node 服务的 git clone 工作正常,它的任何私有(private) NPM 依赖项都可以顺利安装。

我相当肯定我的 SSH 设置存在缺陷(并且在 git 克隆私有(private) parent 仓库时它没有表现出来),因为我在链接中添加了用户名和密码。不过,我不确定,希望能得到一些有关如何正确执行此操作的指导。

最佳答案

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

有效,因为您通过了 usernamepassword并完成 https

"dependencies": {
"scribe": "git+ssh://git@github.com:Company/PrivateDep.git"
},

失败,因为您直接通过 ssh 连接而 Docker 没有做任何 ssh agent从主机转发。

不幸的是,npm 似乎不支持任何 url 格式来发送用户名和密码,例如您的克隆行:https://docs.npmjs.com/files/package.json#git-urls-as-dependencies

您必须将 ssh key 添加到 docker 容器(不推荐)

或者做一些时髦的事情,比如从主机分享你的 SSH_SOCKET,比如:

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

关于node.js - Docker + Nodejs + Private Repo + Private NPM Module - 访问问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26802682/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com