Harry33t opened a new issue, #1079:
URL: https://github.com/apache/dubbo-go-samples/issues/1079
## 问题描述
我在本地测试 apisix sample 时,发现按照 README 启动后,APISIX 无法正常发现 Nacos,导致 /helloworld
接口无法开箱跑通。
APISIX 配置中写的是通过 nacos 这个 hostname 访问 Nacos:
```
discovery:
nacos:
host:
- "http://nacos:8848"
```
但是通过 docker compose 启动后,实际生成的 Nacos 容器名类似:
> nacos203-compose-nacos-1
默认网络中没有 nacos 这个 hostname / alias,因此 APISIX 容器内无法解析 nacos:8848。
这会导致新用户按照 README 操作时,APISIX sample 无法直接跑通。
我本机的测试环境
OS: Windows 11
Go: 1.25
Docker Desktop
Sample: apisix
### 复现步骤:
在仓库根目录执行:
```
docker network create default_network
docker compose -f apisix/deploy/etcd-compose/docker-compose.yml up -d
docker compose -f apisix/deploy/mysql5.7-compose/docker-compose.yml up -d
sleep 15
docker compose -f apisix/deploy/nacos2.0.3-compose/docker-compose.yml up -d
sleep 30
docker compose -f apisix/deploy/apisix-compose/docker-compose.yml up -d
```
然后按照 README 配置 APISIX proto 和 route,最后请求:
> curl 'http://127.0.0.1:80/helloworld?name=World'
预期结果:
接口应该正常返回:{"age":21,"name":"Hello World","id":"12345"}
实际结果:
APISIX 无法正确初始化 Nacos discovery。日志中可以看到类似错误:
```
[lua] init.lua:354: nodes(): wait init
[error] /usr/local/apisix/apisix/discovery/nacos/init.lua:361:
attempt to index upvalue 'applications' (a nil value)
```
临时解决方法:
手动给 Nacos 容器加上 nacos 网络别名后,示例可以跑通:
```
docker network disconnect default_network nacos203-compose-nacos-1
docker network connect --alias nacos default_network nacos203-compose-nacos-1
```
之后再次请求:
> curl 'http://127.0.0.1:80/helloworld?name=World'
> 可以正常返回:{"age":21,"name":"Hello World","id":"12345"}
## 建议修复方式
建议在:
> apisix/deploy/nacos2.0.3-compose/docker-compose.yml
中显式增加容器名或网络别名,例如:
```
services:
nacos:
container_name: nacos
```
或者:
```
services:
nacos:
networks:
default_network:
aliases:
- nacos
```
这样可以让 APISIX 配置中的 http://nacos:8848 与 Docker 网络中的实际 hostname 保持一致。
## 其他相关文档建议
在测试 APISIX sample 时,还发现几个文档体验问题:
README 中使用固定的 sleep 10 / sleep 20,但首次启动时 MySQL / Nacos 可能需要更久,建议改成 health
check。
README 中多次切换工作目录,建议统一成从仓库根目录执行 docker compose -f ...。
当前 Nacos compose 看起来使用的是内嵌 Derby,MySQL 容器可能并不是这个 demo 的必要依赖。
建议 README 增加一个 teardown / cleanup 章节,方便用户清理容器和网络。
如果这个修复方向可以接受,我可以继续提交 PR。
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]