Docker环境下PHP连接DynamoDB容器失败求助
解决方案:PHP容器无法连接Docker Compose部署的DynamoDB
嘿,我来帮你搞定这个问题!从你遇到的cURL error 6: Could not resolve host: dynamodb错误来看,核心问题是PHP容器没法解析到DynamoDB容器的主机名,咱们一步步来解决:
1. 修正Docker Compose配置
首先,Docker Compose默认会为所有服务创建一个共享网络,服务之间可以直接通过服务名称互相访问,不需要复杂的links配置。你当前的配置里有几个可以优化的点:
- Web容器映射8000端口完全没必要,因为PHP容器是直接和DynamoDB容器通信,不走Nginx代理
links配置可以简化,甚至不需要(新版本Compose默认支持服务名解析)
修正后的docker-compose.yml如下:
web: image: nginx:latest ports: - "8080:80" volumes: - ./code:/code - ./site.conf:/etc/nginx/conf.d/site.conf depends_on: - php - dynamodb php: build: php/ volumes: - ./code:/code depends_on: - dynamodb dynamodb: build: dynamodb/ expose: - 8000
注意:
depends_on只是保证容器启动顺序,不保证服务完全就绪,但对于DynamoDB Local来说启动很快,基本没问题。
2. 修正PHP代码中的Endpoint配置
你之前在index.php里尝试了localhost、db、dynamodb,但问题出在:
localhost在PHP容器里指的是容器自身,不是DynamoDB容器- 你在Compose里写了
dynamodb:db的链接,但其实直接用服务名dynamodb更可靠
修正后的SDK配置部分:
$sdk = new Aws\Sdk([ 'endpoint' => 'http://dynamodb:8000', // 这里用dynamodb服务名 'region' => 'us-east-2', 'version' => 'latest', 'credentials' => [ 'key' => 'mine', 'secret' => 'mine too' ] ]);
3. 验证网络连通性(可选但推荐)
如果还是有问题,可以进入PHP容器测试能不能解析到DynamoDB:
docker-compose exec php ping dynamodb
如果能收到响应,说明网络没问题;如果不行,检查Compose是否正确启动了所有容器:
docker-compose ps
额外提示
- DynamoDB Local其实不严格验证AWS凭证,所以你设置的
AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY只要不为空就行 - 你的PHP Dockerfile里直接克隆AWS SDK的仓库并编译,其实更推荐用Composer直接安装SDK,这样更简单也更易维护:
然后在# 在PHP Dockerfile里替换SDK安装部分 RUN cd /code && composer require aws/aws-sdk-phpindex.php里用require("/code/vendor/autoload.php");加载即可。
内容的提问来源于stack exchange,提问作者CHBresser
相关产品推荐
相关产品推荐

