docker-compose无法解析服务

问题描述 投票:2回答:1

我正在尝试构建一个由角度ui和.net核心webapi组成的docker-compose应用程序。但是,UI无法与webapi通信,因为当我尝试引用webapi时,我收到了ERR_NAME_NOT_RESOLVED。

这是我的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'

以下是相应的dockerfiles:

的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"]

角度UI:

#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(“http://api/api/values”)从UI引用api时,我得到一个ERR_NAME_NOT_RESOLVED。我错过了什么?

编辑:我也成功地从UI容器运行针对api的cURL。 I.E.

curl http://api/api/values

(在端口80上作为默认值)返回预期值。对我而言,这意味着这确实是一个nginx问题。

angular nginx containers docker-compose service-discovery
1个回答
0
投票

我不确定端口。尝试公开'api'服务的端口:

     api:
       image: demoapi
...
       ports:
         - '8081:80'

然后,使用正确的URL重试:http.get(“http://api:8081/api/values”)

© www.soinside.com 2019 - 2024. All rights reserved.