首页 » PHP » 正文

解决 docker 中 composer 更新依赖时报RuntimeException

原本已经用 docker 部署好了 PHP的 container,以及 composer 的依赖。

最近需要更新一个依赖,执行 “`dcoker-compose exec php composer require “myTeam/xxxx”“`却报:

[runtimeexception]
Failed to execute git clone --mirror "git@gitlab.com:XXXXXX" "~/.cache/composer/vcs/bitbucket.orgXXXXXXXX.git/"
Cloning into bare repository '"~/.cache/composer/vcs/bitbucket.orgXXXXXXXX.git'…
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.

查了网上其它人方案,都无法解决,例如:

1.修改 ~/.ssh/ 下 config 及 id_rsa, id_rsa.pub, known_hosts 等文件的权限为 600 或 400

https://stackoverflow.com/questions/51744040/docker-bad-owner-or-permissions-on-root-ssh-config

https://serverfault.com/questions/253313/ssh-returns-bad-owner-or-permissions-on-ssh-config

https://github.com/welaika/docker-wordmove/issues/16

2.清除 composer 缓存

https://www.cnblogs.com/songyanan/p/13294282.html

3.确认 Git 环境变量 或 用户名密码/token

https://stackoverflow.com/questions/17792588/composer-says-git-not-found/17794382#17794382

https://blog.csdn.net/qq_16885135/article/details/52072257

https://blog.csdn.net/will5451/article/details/51995629

4.把 docker 的 container、image 全部删掉,重新部署

……

……

以上种种都不能解决

后面判断主要问题还是在 ~/.ssh/中各个文件的权限上,因为 docker container 里的ssh文件是从Ubuntu中复制进去的,权限属性跟Ubuntu下的 ~/.ssh/ 一样,唯一不同的是 container 里面的 owner 是 1000

docker-compose exec php bash 进入container

而 container 中使用的是 root , 所以试着把这4个文件的 owner 改为 root

退出,再执行“`dcoker-compose exec php composer require “myTeam/xxxx”“`,终于可以正常更新了。

发表评论