Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular docker compose无法解析服务_Angular_Nginx_Containers_Docker Compose_Service Discovery - Fatal编程技术网

Angular docker compose无法解析服务

Angular 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:

我正在尝试构建一个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:
         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访问它,得到了相同的结果。请重试。我有相同的问题,但不同的端口。我需要指定端口