PAYATHON 2026

如何从 DDEV 容器克隆 Docker Desktop 中的 Forgejo 仓库?

数据小陈

结论

在 DDEV 容器中,localhost 指向容器自身,不会自动指向运行 Forgejo 的 Docker Desktop 容器,也不一定指向 Windows 主机。因此,浏览器能打开 http://localhost:3004/myUser/store,并不能说明 DDEV 容器也能通过这个地址访问 Forgejo。

报错表明,Git 正在连接 localhost:3004,但 DDEV 容器自己的 3004 端口没有服务响应。克隆仓库时,需要使用 DDEV 容器实际能够访问的主机地址,并确认 Forgejo 的 3004 端口已对该地址开放。

检查连接路径

进入 DDEV 项目的 Web 容器:

ddev ssh

在容器中检查 host.docker.internal 是否能解析,并尝试连接:

getent hosts host.docker.internal
curl -v http://host.docker.internal:3004/myUser/store

如果连接成功,就可以用这个地址克隆:

git clone http://host.docker.internal:3004/myUser/store.git

host.docker.internal 是否指向正确的主机,取决于 DDEV 使用的 Docker 主机和 WSL2 网络配置。Docker CE 在 WSL2 中运行,Forgejo 则在 Docker Desktop 的 Docker 环境中运行,两者可能不在同一个 Docker 网络里。因此,这个名称不一定能连到 Windows 上发布的端口。

如果检查失败,就需要从 DDEV 容器中找到能够访问 Windows 主机及其 3004 端口的地址,并用它替换 host.docker.internal。还要检查 Forgejo 容器的端口发布设置。如果 3004 只绑定到主机的 127.0.0.1,DDEV 容器发起的连接可能无法到达。0.0.0.0 可用于让服务端监听所有网络接口,但通常不应作为访问服务的目标地址。访问时应使用主机实际可达的 IP 或主机名。

让两个服务共享可达网络

如果想通过容器服务名访问 Forgejo,可以考虑将 Forgejo 和 DDEV 放到同一个 Docker 网络中,再通过 Forgejo 的服务名和容器端口访问。Forgejo 目前运行在 Docker Desktop,DDEV 使用 WSL2 中的 Docker CE。要让它们共享网络,通常需要由同一个 Docker 引擎管理两个服务,或另外配置两边都能访问的网络路径。

端口映射、主机地址和 WSL2 网络转发方式都取决于实际配置。先确认从 DDEV 容器执行的 curl 能访问 Forgejo,再用同一个可达地址执行 git clone。

备注:内容仅供参考。