[英]Using bower inside a docker container with a private repo dependency
我試圖在docker-compose.yml
容器中運行bower install
,在docker-compose.yml
作為命令傳遞
docker-compose.yml
中的相關代碼:
services:
assets:
build: ./src
command: >
sh -c '
bower install --allow-root;
'
bower.json
具有以下依賴關系:
{
"name": "projectname",
"version": "version",
"dependencies": {
"remote-repo": "ssh://git@remoterepo.url/repo.git#branch"
}
}
這個遠程倉庫是私人的。 主機具有從該遠程啟動的正確SSH憑據。
我嘗試將SSH憑據從我的主機傳遞到docker容器4或5種不同的方式,但每次嘗試都會向我發送相同的錯誤消息:
docker_1 | bower repo#branch ECMDERR Failed to execute "git
ls-remote --tags --heads ssh://git@remoterepo.url/repo.git", exit code
of #128 Host key verification failed. fatal: Could not read from
remote repository. Please make sure you have the correct access
rights and the repository exists.
當我直接exec
到容器中並嘗試git克隆時,它會詢問我是否確定要將遠程數據庫添加到known_hosts,然后它會詢問我的ssh密鑰的密碼(正如第一次嘗試時所預期的那樣)連接到遙控器)。
我按照此stackoverflow響應中的步驟嘗試繞過提示: https : //stackoverflow.com/a/23411161/4736263
甚至竟然通過ssh將所有內容都扔到了它上面,在RUN命令下將這些步驟添加到我的Dockerfile: https ://serverfault.com/questions/132970/can-i-automatically-add-a-new -host到已知的主機/ 316100#316100
就目前而言,我的安裝腳本(運行docker-compose up
等等)包括以下行:
cp $HOME/.ssh/id_rsa src/id_rsa
我已經確認id_rsa被正確復制到Dockerfile所在的目錄中(具體來說,我的app中的src
)
我的Dockerfile包含這個:
# Make ssh dir
RUN mkdir /root/.ssh/
# Copy over private key, and set permissions
ADD id_rsa /root/.ssh/id_rsa
# Create known_hosts
RUN touch /root/.ssh/known_hosts
# Add remote's key
RUN ssh-keygen -R remoterepo.url
RUN ssh-keygen -R remoterepoIP
RUN ssh-keygen -R remoterepo.url,remoterepoIP
RUN ssh-keyscan -H remoterepo.url,remoterepoIP >> /root/.ssh/known_hosts
RUN ssh-keyscan -H remoterepoIP >> /root/.ssh/known_hosts
RUN ssh-keyscan -H remoterepo.url >> /root/.ssh/known_hosts
有沒有辦法讓docker容器內的bower訪問私人遠程倉庫? 我覺得我已經嘗試了一切(我整個星期都嘗試過不同的事情)。
這種配置似乎有效的唯一方法是:
1)在私有倉庫中為docker容器創建只讀密鑰
2)將只讀的cred和known_hosts放入具有Dockerfile的目錄中的repo中
3)調整id_rsa文件的權限
我嘗試調整從主機復制的憑據的權限,但仍然給出了權限被拒絕錯誤。 解決這個問題的唯一方法是在我們的私人倉庫中為這個容器創建一個特殊的只讀密鑰。
這並沒有真正解決最初的問題,但它讓我們成為了我們需要的地方。 我們的實現是.gitignore
憑證並以另一種方式將它們傳遞給用戶,這可以防止秘密存儲在repo中。
我從我們的安裝腳本中取出了copy命令,因此Dockerfile
的最終結果Dockerfile
:
# Make ssh dir
RUN mkdir /root/.ssh/
# Copy over private key, and set permissions
COPY id_rsa /root/.ssh/id_rsa
COPY known_hosts /root/.ssh/known_hosts
RUN chmod 600 /root/.ssh/id_rsa
私鑰與Dockerfile
位於同一目錄中。
我懷疑問題仍然在於需要輸入一個密碼 - 對2014年之前的StackOverflow文章有一個評論:
希望這有助於某人。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.