我创建了在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的新手,所以有人可以帮助我发现问题。
答案 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