docker容器:无法从另一个容器访问dotnet Web api容器

时间:2019-08-29 19:07:31

标签: docker dockerfile docker-machine

我创建了在Docker容器中运行的dotnet核心Web API。

当我尝试从浏览器(Chrom)调用API时,得到了结果,但是当我尝试从也在容器中运行的Angular应用程序调用API时,出现了connection_faild错误。

Web API的docker文件:

FROM microsoft/dotnet:2.2-sdk
COPY /pub/ /root/
WORKDIR /root/
ENV ASPNETCORE_URLS="http://*:5000"
EXPOSE 5000
ENTRYPOINT ["dotnet", "Backend-lite.dll"]

运行容器:

docker run -p 5000:5000 netcore-rest

Angular应用的docker文件:

FROM node:8.11.2-alpine as node
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

FROM nginx:1.13.12-alpine
COPY --from=node /usr/src/app/dist/myapp /usr/share/nginx/html
COPY ./nginx.conf /etc/nginx/conf.d/default.confs

运行有角容器:

docker run -t -p 80:80 angular

我正在使用此连接字符串从angular应用程序连接到API

const BASE_URL = 'http://localhost:5000/api/';

我也尝试过在两个容器之间创建一个网络,但是没有用。

docker network create --gateway 172.16.1.1 --subnet 172.16.1.0/24 
app_subnet

然后我运行了api容器:

docker run --name server --ip 172.16.1.2 -p 5000:5000 --network 
app_subnet dotnet

有角容器:

docker run --name app --ip 172.16.1.3 -p 4200:80 --network app_subnet 
angular

然后我更改了角度应用程序中的连接字符串以匹配容器的IP

const BASE_URL = 'http://172.16.1.2:5000/api/';

我是Docker的新手,所以有人可以帮助我发现问题。

2 个答案:

答案 0 :(得分:0)

尝试“ http://host.docker.internal:5000/api/

Localhost将是容器的环回,但您需要主机PC的端口5000

答案 1 :(得分:0)

最好的建议是在使用两个单独的服务时使用docker-compose。 https://docs.docker.com/compose/gettingstarted/

然后在您的有角容器中,可以使用服务名称而不是IP地址或本地主机。

作为参考示例 https://github.com/DanWahlin/Angular-Docker-Microservices/blob/master/docker-compose.yml