我在docker中运行了2个.net核心应用程序(一个是Web API,另一个是使用Web API的Web应用程序):
我似乎无法通过Web应用程序与api通信,但可以通过在浏览器中的http://localhost:44389直接转到api来访问该api
我的Web应用程序中有一个环境变量,具有相同的信息,但无法获取。
如果要在azure上指定我的API的部署版本,它就可以与该地址通信。似乎问题出在容器之间互相交谈。
我读到,创建网桥应该可以解决该问题,但事实并非如此。我究竟做错了什么?
这是我的docker compose文件:
version: '3.4'
services:
rc.api:
image: ${DOCKER_REGISTRY}rcapi
build:
context: .
dockerfile: rc.Api/Dockerfile
ports:
- "44389:80"
rc.web:
image: ${DOCKER_REGISTRY}rcweb
build:
context: .
dockerfile: rc.Web/Dockerfile
environment:
- api_endpoint=http://localhost:44389
depends_on:
- rc.api
networks:
my-net:
driver: bridge
最佳答案
docker-compose
在容器之间自动创建网络。由于您的容器位于同一网络中,因此您可以使用别名在容器之间进行连接。 docker-compose
使用容器名称和容器IP创建别名。所以在你的情况下docker-compose
应该看起来像
version: '3.4'
services:
rc.api:
image: ${DOCKER_REGISTRY}rcapi
build:
context: .
dockerfile: rc.Api/Dockerfile
ports:
- "44389:80"
rc.web:
image: ${DOCKER_REGISTRY}rcweb
build:
context: .
dockerfile: rc.Web/Dockerfile
environment:
- api_endpoint=http://rc.api
depends_on:
- rc.api
networks:
my-net:
driver: bridge
由于
rc.api
在其容器中打开端口80,因此rc.web
可以使用http://rc.api:80
或http://rc.api
访问80端口(无端口,因为HTTP端口默认为80)
关于docker - Docker Web应用程序无法与API应用程序通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54380543/