在Docker容器内使用bower,并使用私有的repo依赖

我试图在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. 

当我直接进入容器,并尝试一个git克隆,它问我是否确定我想将远程添加到known_hosts,然后它要求我的ssh密钥的密码(正如预期的第一次尝试连接到远程)。

我已经按照这个stackoverflow响应中的步骤尝试绕过提示: https : //stackoverflow.com/a/23411161/4736263

甚至竟然把所有东西都扔到了通过ssh,我可以在运行命令下添加这些步骤到我的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所在的目录(特别是我的应用程序中的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集装箱内获取私人远程回购? 我觉得我已经尝试了一切(我整个星期都在尝试不同的东西)。

这个configuration似乎工作的唯一方法是:

1)在私有仓库中为泊坞窗容器创build一个只读密钥
2)把只读的creds和known_hosts放到Dockerfile目录下的repo中
3)调整id_rsa文件的权限

我尝试调整从主机复制凭据的权限,但仍然给权限拒绝错误。 解决这个问题的唯一方法就是在我们的私人仓库中为这个容器创build一个特殊的只读密钥。

这并不能真正解决最初的问题,但它使我们得到了我们需要的地方。 我们的实现是将.gitignore凭据以另一种方式传递给用户,这样可以防止秘密存储在回购中。

我将复制命令从安装脚本中取出,因此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在同一个目录Dockerfile

我怀疑问题仍然在于需要把一个密码短语 – 在2014年的先前的StackOverflow文章有一个评论说: 显然不能使用被保护的密码

希望这有助于某人。