Docker容器安装Bitbucket私有Composer依赖报公钥权限拒绝错误
问题场景
升级PHP项目依赖过程中,某一个依赖包为托管在Bitbucket上的私有仓库,使用的docker-compose.yaml配置如下:
version: '3' services: composer: image: composer:2.3.5 environment: - COMPOSER_CACHE_DIR=/app/.cache/composer volumes: - .:/app - ~/.ssh/id_rsa:/root/.ssh/id_rsa:ro
按照上述配置,执行docker-compose run composer install即可安装全部依赖。实际运行时公开依赖包安装流程完全正常,但拉取Bitbucket私有包时抛出如下报错:
git@bitbucket.org: Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
已确认本地SSH私钥已经成功挂载传入容器,执行composer install时也会正常弹出密钥口令输入提示,但始终出现上述公钥权限拒绝错误。
遗漏配置说明&修复方案
你漏了两个SSH连接的必要前置配置,这两个问题都会导致SSH认证失败:
- 缺失SSH目录与私钥的合规权限配置:SSH客户端有严格的安全校验规则,要求
/root/.ssh目录权限必须为700,目录内的私钥文件权限必须为600,如果权限过宽会直接判定私钥不可信、拒绝使用。你只单独挂载了私钥文件,既没有提前创建权限合规的.ssh目录,也没有给挂载进去的私钥设置正确权限,认证自然失败。 - 缺失Bitbucket主机信任配置:容器内默认没有Bitbucket的主机公钥指纹记录,SSH首次连接时需要校验主机身份,而composer调用git拉取代码时没有预留交互确认指纹的终端,会直接中断连接,不会弹出确认提示。
修正后的配置参考
调整docker-compose.yaml,在容器启动执行composer命令前自动补全上述配置即可:
version: '3' services: composer: image: composer:2.3.5 environment: - COMPOSER_CACHE_DIR=/app/.cache/composer volumes: - .:/app - ~/.ssh/id_rsa:/root/.ssh/id_rsa:ro entrypoint: ["/bin/sh", "-c"] command: - | # 配置SSH目录、私钥的合规权限 chmod 700 /root/.ssh chmod 600 /root/.ssh/id_rsa # 自动写入Bitbucket主机指纹,跳过交互确认 ssh-keyscan bitbucket.org >> /root/.ssh/known_hosts chmod 644 /root/.ssh/known_hosts # 执行依赖安装 composer install
如果不想修改compose文件,也可以先执行docker-compose run --entrypoint sh composer进入容器交互终端,手动执行上述权限配置、主机指纹写入命令后,再运行composer install即可正常拉取私有依赖。
内容的提问来源于stack exchange,提问作者TJ is too short
相关产品推荐
相关产品推荐

