【发布时间】:2020-08-30 00:08:37
【问题描述】:
在我们的设置中,我们有一个自动构建系统。构建实际上是在 docker 内完成的(因此主机服务器不必安装所有库)。安装应该使用主机操作系统用户的凭据。
当我不使用 docker 映像并手动调用 npm i --only=production 时,系统可以正常工作。或者,当我删除对私有 git 存储库的任何依赖时,它会起作用。但是,当我同时使用两者时,我会收到“警告”/错误。我首先收到主机不在已知主机列表中的“问题”(我知道这是针对我测试它的本地机器)。随后出现错误git@HOST: Permission denied (publickey).
docker文件如下:
FROM node:12-alpine
RUN apk update
RUN apk upgrade
RUN apk add rsync
RUN apk add git less openssh
RUN mkdir /javascript
WORKDIR /javascript
ENTRYPOINT npm i --only=production
docker 使用这些参数运行:
sudo docker run -it --volume=/home/paul/PROJECTDIR/javascript:/javascript --volume=/home/paul/.ssh/:/root/.ssh/ IMAGEID
package.json 的豁免(实际上是违规行):
"dependencies": {
"configuration-loader": "git+ssh://git@HOST",
}
我可以很容易地从 docker 外部执行 npm i --only=production,它一定是 docker 没有正确读取 ssh 信息吗?我仔细检查了,但 /home/paul/.ssh 包含正确的 id_rsa id_rsa.pub 和 known_hosts 文件。
那么这里发生了什么?为什么从 docker 安装没有读取 ssh 信息?我是否绑定了错误的内部位置? - 我应该使用什么位置?
我还尝试将入口点更改为 sh,然后检查 ~/.ssh 中的内容(并且该目录存在) - 这显示的键非常好。
为了调试,我将入口点更改为sh 并手动尝试安装(同样的错误),但使用printenv 显示:
GIT_SSH_COMMAND=ssh -Tvv
NODE_VERSION=12.18.3
HOSTNAME=3dd43e45c090
YARN_VERSION=1.22.4
SHLVL=2
HOME=/root
TERM=xterm
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/javascript
此外,使用ENV GIT_SSH_COMMAND ssh -Tvv 报告的消息如下:
debug1: identity file /home/node/.ssh/id_rsa type -1
当我将音量更改为不链接到 /root 内而是链接到 /home/node 时,调试消息变为:
debug1: identity file /root/.ssh/id_rsa type -1
检查主目录如何链接运行:
ls -alrth /home
显示(将卷绑定到 /root 时):
drwxr-xr-x 1 root root 4.0K Jul 28 21:24 .
drwxr-sr-x 1 node node 4.0K Aug 31 09:07 node
drwxr-xr-x 1 root root 4.0K Aug 31 09:07 ..
当绑定到/home/node 时,会出现相同的条目,只是node 在.. 之后(虽然报告的时间相同,所以一定是侥幸)。
它似乎实际上强制执行一个新的 ssh 密钥或什么?如果它已经找到一个它会强制执行本地密钥?
【问题讨论】:
-
/home/node是符号链接吗?ls -alrth /home在两种情况下都返回什么? -
@VonC 他们是“平等的”。
标签: git docker ssh npm-install