我有一个Docker容器,它正在启动一个项目,该项目在私有仓库中具有依赖项。
Dockerfile
正在复制我的无密码SSH密钥(权限为600
和644
):
COPY docker/config/id_rsa /root/.ssh/
COPY docker/config/id_rsa.pub /root/.ssh/
复制后,将安装Composer依赖项:
RUN echo *** >> /etc/hosts \
&& composer config -a -g *URL *USER *PASS \
&& composer install --prefer-dist --no-progress
同时,我删除了composer.lock
,以确保以前的安装没有任何保留。
来自作曲家的存储库部分看起来像这样:
"repositories": [
{
"type": "vcs",
"url": "git@***:***/libs/***.git",
"options": {
"ssl": {
"local_cert": "~/.ssh/id_rsa.pub"
}
}
},
],
在创建容器的过程中,我收到一条错误消息:
[RuntimeException]
Failed to execute git clone --mirror 'git@***:***/libs/***.git' '/root/.composer/cache/vcs/.../'
Cloning into bare repository '/root/.composer/cache/vcs/...'...
Host key verification failed.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
存储库确实存在,SSH密钥有效,并且是最奇怪的...如果我省略composer install
命令并输入创建的容器,则不做任何更改并从终端手动进行操作,它将安装所有内容。
编辑:
如果在容器创建期间无论如何都无法使用密钥,我也曾尝试在RUN
命令中手动编写密钥,但这无济于事。
我还尝试过从Composer中删除"options"
部分
答案 0 :(得分:0)
RUN
命令中的以下部分丢失了:
echo "xxx.xxx.xxx.xxx my_server_name" >> /etc/hosts
ssh-keyscan -t rsa my_server_name >> ~/.ssh/known_hosts
完成后,我可以完全省略Composer中的"options"
部分