Angular docker compose无法解析服务
我正在尝试构建一个docker compose应用程序,它由一个angular ui和一个.net核心webapi组成。但是,UI无法与webapi通信,因为当我尝试引用webapi时,我得到了一个错误名称\u NOT \u解析 这是我的docker-compose.ymlAngular docker compose无法解析服务,angular,nginx,containers,docker-compose,service-discovery,Angular,Nginx,Containers,Docker Compose,Service Discovery,我正在尝试构建一个docker compose应用程序,它由一个angular ui和一个.net核心webapi组成。但是,UI无法与webapi通信,因为当我尝试引用webapi时,我得到了一个错误名称\u NOT \u解析 这是我的docker-compose.yml version: '3' services: ui: image: demoui container_name: demoui build:
version: '3'
services:
ui:
image: demoui
container_name: demoui
build:
context: ./DemoUI/
dockerfile: Dockerfile
ports:
- '8080:80'
api:
image: demoapi
container_name: api
build:
context: ./DemoApi/DemoApi/
dockerfile: Dockerfile
ports:
- '80'
以下是相应的DockerFile:
WebApi
# Build Stage
FROM microsoft/aspnetcore-build:2 AS build-env
WORKDIR /api
COPY DemoApi.csproj .
RUN dotnet restore
COPY . .
RUN dotnet publish -c Release -o /publish
# Runtime Image Stage
FROM microsoft/aspnetcore:2
WORKDIR /publish
COPY --from=build-env /publish .
ENTRYPOINT ["dotnet", "/publish/DemoApi.dll"]
角度用户界面:
#compile it up
FROM johnpapa/angular-cli as ng-build
WORKDIR /build
COPY . .
RUN npm rebuild node-sass
RUN npm i
RUN ng build --prod --build-optimizer
# copy compiled files to running container
FROM nginx as runtime
WORKDIR /usr/shared/nginx/html
#remove default contents of nginx directory
RUN rm *
COPY --from=ng-build /build/dist/ .
我可以运行docker ps-a,并且两个容器都在运行,我可以从docker主机上从这两个容器获得正确的响应
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1beef15c8aaf demoui "httpd-foreground" 9 hours ago Up 9 hours 0.0.0.0:8080->80/tcp demoui
4d0ec94cdc51 demoapi "dotnet /publish/D..." 9 hours ago Up 9 hours 0.0.0.0:32776->80/tcp api
我可以从ui容器ping api
docker exec 1beef ping api
PING api (172.19.0.3): 56 data bytes
64 bytes from 172.19.0.3: seq=0 ttl=64 time=0.087 ms
64 bytes from 172.19.0.3: seq=1 ttl=64 time=0.091 ms
但是,当我试图通过http.get(“”)从UI引用api时,我得到了一个错误名称\u NOT \u RESOLVED。
我错过了什么
编辑:我还成功地从UI容器对api运行了一个cURL。即
curl http://api/api/values
(默认情况下在端口80上)返回预期值。对我来说,这意味着这确实是一个nginx问题。我不确定端口。 尝试公开“api”服务的端口:
api:
image: demoapi
...
ports:
- '8081:80'
然后,使用正确的url:http.get(“”)重试所有浏览器应用程序,即使您使用Docker部署,在调用API时,您必须使用
localhost:
,因为您在主机上访问和使用应用程序,因此您的API将首先由主机解析,当然主机上没有API
查看我的详细答案据我所知,暴露的端口只是为了让您可以从docker主机点击它。我正试图从容器内部击中它。此外,还会动态分配一个公开的端口,正如您可以从docker ps的输出中看到的那样,您发布了以下docker ps命令的输出:0.0.0.0:32776->80/tcp,表示api服务正在32776端口上运行。您只能通过此端口访问api容器。每个容器都与docker主机隔离,这是真的;但是,我再次尝试从容器中解析它。容器中的每个服务都有自己的虚拟IP地址,因此它们都可以在端口80上提供服务。否则32776->80将无法工作。对吗?此外,端口映射没有回答错误名称未解决的问题。我尝试了此解决方案,在端口8081上公开了api,并尝试从UI通过http.get访问它,得到了相同的结果。请重试。我有相同的问题,但不同的端口。我需要指定端口