You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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-php
    
    然后在index.php里用require("/code/vendor/autoload.php");加载即可。

内容的提问来源于stack exchange,提问作者CHBresser

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 10:06:39