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

Docker容器内Composer无法解析api.github.com问题求助

解决方案:容器内无法解析api.github.com导致Composer安装失败

你的问题核心是容器内DNS解析失败(curl error 6: Could not resolve host),和GitHub OAuth Token无关,以下是针对性解决步骤:

1. 先确认网络问题类型

进入PHP容器后执行以下命令:

  • 测试外网连通性:ping 8.8.8.8
    • 如果不通:说明容器无法访问外网,需要检查WSL2和Docker的网络桥接配置,或关闭Windows防火墙/杀毒软件重试。
  • 测试DNS解析:ping api.github.com
    • 如果无法解析但ping 8.8.8.8正常:确定是DNS配置问题,按以下步骤修复。

2. 临时修复容器DNS(快速验证)

在容器内直接修改DNS配置文件:

echo "nameserver 8.8.8.8" > /etc/resolv.conf

然后重新执行composer install,如果问题解决,再配置永久方案。

3. 永久配置容器DNS

方式一:通过docker-compose.yml指定

在你的docker-compose.yml中,给PHP服务添加DNS配置:

services:
  # 你的PHP服务名称(比如php-apache)
  php-apache:
    build: ./path/to/your/dockerfile
    # 其他现有配置...
    dns:
      - 8.8.8.8
      - 1.1.1.1

重新构建容器:docker compose up -d --build

方式二:修改Dockerfile添加DNS配置

在Dockerfile末尾添加:

# 配置自定义DNS服务器
RUN echo "nameserver 8.8.8.8" >> /etc/resolv.conf

注意:部分镜像的resolv.conf是动态生成的,若此方法无效,优先使用docker-compose.yml的方式。

方式三:全局配置Docker daemon DNS(所有容器生效)

在Windows Docker Desktop中:

  1. 打开Settings → Docker Engine
  2. 在配置JSON中添加dns字段:
    {
      "dns": ["8.8.8.8", "1.1.1.1"],
      # 其他现有配置...
    }
    
  3. 点击Apply & Restart重启Docker

4. 检查WSL2的DNS配置(根源排查)

如果WSL2自身DNS有问题,容器也会受影响:

  1. 在WSL终端中创建/etc/wsl.conf文件:
    cat <<EOF > /etc/wsl.conf
    [network]
    generateResolvConf = false
    EOF
    
  2. 删除自动生成的resolv.conf:rm /etc/resolv.conf
  3. 新建自定义resolv.conf:
    echo "nameserver 8.8.8.8" > /etc/resolv.conf
    
  4. 关闭并重启WSL:在Windows终端执行wsl --shutdown,然后重新打开WSL。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 02:47:38