簡體   English   中英

嘗試從 docker 容器中安裝使用(私有)git 存儲庫的包失敗

[英]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.pubknown_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM