[英]Trying to install packages which use (a private) git repository from inside a docker container fails
在我們的設置中,我們有一個自動構建系統。 構建實際上是在 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的install沒有讀取到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 密鑰之類的? 如果它已經找到一個它強制執行本地密鑰?
好的,這是在@VonC 的幫助下完成的,這是迄今為止我最不喜歡的解決方案。 但是我解決它的方法是將/home
和/home/node
綁定到外部主目錄。
sudo docker run -it \
--volume=/home/paul/PROJECTDIR/javascript:/javascript \
--volume=/home/paul/.ssh/:/root/.ssh/ \
--volume=/home/paul/.ssh/:/home/node/.ssh IMAGEID
丑陋,但工作。
首先向您的 Dockerfile 添加一行:
ENV GIT_SSH_COMMAND='ssh -Tvv'
然后,您將查看是否有錯誤消息或 Docker 從何處獲取其 SSH 密鑰:這有助於了解發生了什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.