如何向Docker部署的Node服务器发送HTTP GET请求?
如何向你的Docker化Node服务器发送HTTP GET请求
首先,你不需要使用容器内部的IP地址(172.17.0.2)——因为你已经通过-p 8081:8081完成了端口映射,把主机的8081端口转发到容器的对应端口。不过这里有个关键细节需要先修正,否则你的请求大概率会失败:
先解决端口不匹配的隐患
你的Node服务器代码里监听的端口逻辑是:
const port = process.env.PORT || 5001;
但你在Docker运行命令里没有设置PORT环境变量,同时端口映射的是8081:8081。这会导致服务器实际监听容器内的5001端口,而你把主机的8081映射到了容器的8081,两者端口不匹配,请求根本无法到达服务器。
你可以选以下任意一种方式修正:
- 方式1:在Docker run命令中添加
PORT环境变量,让服务器监听容器的8081端口:docker run -t -i --env private=0x12345 --env public=0x11111 --env PORT=8081 -p 8081:8081 game_server - 方式2:修改端口映射规则,把主机8081端口转发到容器的5001端口:
docker run -t -i --env private=0x12345 --env public=0x11111 -p 8081:5001 game_server - 方式3:直接修改Node代码的默认端口为8081,省去环境变量配置:
const port = process.env.PORT || 8081;
发送GET请求的正确方式
修正端口问题后,根据你的测试场景选择对应的地址:
1. 在运行Docker的主机上测试
直接用localhost加上映射的主机端口即可:
调用
complete_checkpoint接口(替换123和456为实际的reviewer和checkpoint ID):curl http://localhost:8081/api/complete_checkpoint/123/456也可以直接在浏览器地址栏输入这个地址测试。
调用
add_checkpoint接口(注意路径中的checkpoint名称需要URL编码,比如"Final Stage"要写成Final%20Stage):curl http://localhost:8081/api/add_checkpoint/Final%20Stage如果你不想手动编码,也可以用curl的
--data-urlencode参数配合-G强制使用GET请求:curl -G http://localhost:8081/api/add_checkpoint --data-urlencode "checkpoint_name=Final Stage"
2. 从局域网内的其他机器测试
使用运行Docker的主机的局域网IP地址(比如你的主机IP是192.168.1.100)加上映射的主机端口:
curl http://192.168.1.100:8081/api/complete_checkpoint/123/456
3. 从公网测试(如果主机有公网IP)
使用主机的公网IP地址加上映射的主机端口即可,同时要确保主机的防火墙已经开放8081端口。
内容的提问来源于stack exchange,提问作者DHuang
相关产品推荐
相关产品推荐

