如何在DDEV Docker容器中配置SSH密钥以拉取BitBucket依赖?
解决Docker容器内Composer拉取BitBucket私有依赖的SSH密钥问题
方法一:挂载本地SSH密钥目录到容器
这是最直接的方式,将本地有权限访问BitBucket的SSH密钥挂载到容器内对应用户目录:
- 本地先验证密钥有效性:执行
ssh git@bitbucket.org,确认能成功连接(首次连接需输入yes确认主机密钥)。 - 运行容器时挂载密钥目录与代码目录,进入容器终端:
docker run -it -v ~/.ssh:/root/.ssh -v $(pwd):/app -w /app your-php-composer-image bash
-v ~/.ssh:/root/.ssh:将本地SSH密钥目录挂载到容器root用户的.ssh目录-v $(pwd):/app -w /app:将当前代码目录挂载到容器/app并设为工作目录(按需调整)
- 进入容器后,添加BitBucket主机密钥到已知列表(避免Composer执行时的交互式确认):
ssh-keyscan bitbucket.org >> /root/.ssh/known_hosts
- 执行Composer安装:
composer install
如果用Docker Compose,在docker-compose.yml中配置:
services: app: image: your-php-composer-image volumes: - ~/.ssh:/root/.ssh - .:/app working_dir: /app environment: - COMPOSER_ALLOW_SUPERUSER=1 # 可选,跳过Composer超级用户权限提示
方法二:使用SSH代理转发(更安全)
通过本地SSH代理转发密钥,容器不会直接持有密钥文件,仅通过套接字使用代理:
- 本地启动并配置SSH代理:
eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_rsa
- 运行容器时挂载SSH代理套接字:
docker run -it -v $SSH_AUTH_SOCK:/ssh-agent -e SSH_AUTH_SOCK=/ssh-agent -v $(pwd):/app -w /app your-php-composer-image bash
- 添加BitBucket主机密钥:
ssh-keyscan bitbucket.org >> ~/.ssh/known_hosts
- 执行
composer install即可。
方法三:临时复制密钥到容器(应急用,不推荐)
仅用于临时操作,用完需立即删除密钥避免泄露:
- 复制本地密钥到运行中的容器:
docker cp ~/.ssh/id_rsa <容器ID或名称>:/root/.ssh/id_rsa
- 进入容器并设置密钥权限(SSH要求密钥权限为600):
docker exec -it <容器ID或名称> bash chmod 600 /root/.ssh/id_rsa
- 添加BitBucket主机密钥后执行
composer install,完成后删除密钥:
rm /root/.ssh/id_rsa
注意事项
- 确保容器内已安装
openssh-client:Debian/Ubuntu系执行apt-get update && apt-get install -y openssh-client,Alpine系执行apk add openssh-client。 - 若容器使用非root用户,需将SSH目录挂载到对应用户的主目录(如
/home/www-data/.ssh),并调整目录/文件权限。 - 禁止将SSH密钥打包进Docker镜像,会引发密钥泄露风险。
内容的提问来源于stack exchange,提问作者DieselHashtag
相关产品推荐
相关产品推荐

