Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.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
如何从回购docker中提取和运行docker映像_Docker_Asp.net Web Api_.net Core_Docker Pull - Fatal编程技术网

如何从回购docker中提取和运行docker映像

如何从回购docker中提取和运行docker映像,docker,asp.net-web-api,.net-core,docker-pull,Docker,Asp.net Web Api,.net Core,Docker Pull,我有一个使用.NETCore创建的WebApi。我的解决方案根目录中有一个.dockerfile文件: FROM mcr.microsoft.com/dotnet/core/aspnet:2.1-stretch-slim AS base WORKDIR /app EXPOSE 80 EXPOSE 443 FROM mcr.microsoft.com/dotnet/core/sdk:2.1-stretch AS build WORKDIR /src COPY ["Nuget.config",

我有一个使用.NETCore创建的WebApi。我的解决方案根目录中有一个.dockerfile文件:

FROM mcr.microsoft.com/dotnet/core/aspnet:2.1-stretch-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:2.1-stretch AS build

WORKDIR /src
COPY ["Nuget.config", ""]
COPY ["Proyecto.WebApi/Proyecto.WebApi.csproj", "Proyecto.WebApi/"]
COPY ["Proyecto.Model/Proyecto.Model.csproj", "Proyecto.Model/"]
COPY ["Proyecto.Bl/Proyecto.Bl.csproj", "Proyecto.Bl/"]

RUN dotnet restore "Proyecto.WebApi/Proyecto.WebApi.csproj" --configfile "Nuget.config"
COPY . .

WORKDIR "/src/Proyecto.WebApi"
RUN dotnet build "Proyecto.WebApi.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "Proyecto.WebApi.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Proyecto.WebApi.dll"]
使用这些命令,我可以毫无问题地构建、运行和推送Api:

docker build -t dockerlocal .
docker run -d -p 8080:80 --name myapp dockerlocal
docker tag <image_id> docker.nexus.example.com/dockerlocal
docker push docker.nexus.example.com/dockerlocal
控制台显示,一切正常。但当我测试API时,我会在浏览器中看到: “本地主机无envióningún数据。错误为空的响应”


有什么问题?为什么我不能在docker pull comand之后运行我的WebApi。

评论中的讨论如下:这里的问题是端口映射从第一个命令中的8080:80更改为第二个命令中的9090:90。如作者所确认的,将容器端口的映射切换回端口80修复了该问题

现在,解释一下这里发生了什么:端口映射8080:80意味着您正在将主机环境中的端口8080映射到来宾环境中的端口80。其中guest环境是实际的容器

只要主机端口没有被另一个进程占用,映射的主机端口部分可以任意更改,即从8080更改为9090是可行的。但是,来宾端口的情况并非如此,因为来宾端口是由容器上运行的进程确定的。因此,如果容器应用程序侦听端口80,那么将来宾映射切换到端口90(本例中发生的情况)将不起作用,因为那里没有侦听任何内容

也很可能有多个端口映射,即,如果在容器中有应用程序侦听的端口80和管理控制台侦听的端口90,那么最终可能会有两个端口映射:例如8080:80和9090:90

如果您希望同时使用多个环境-生成多个容器,即您可以执行以下操作:

docker run -d -p 8080:80 --name myapp1 dockerlocal
docker run -d -p 9090:80 --name myapp2 dockerlocal

但是请注意,最终将有两个独立的容器彼此独立运行。

第二个docker run命令中的端口映射为90,但第一个命令中的端口映射为80。这似乎是你的问题-你能检查一下吗?@taleodor你说得对,我把端口改成了9090:80,它正常工作了。但我不明白为什么,我是故意的。我想使用另一个端口,并模拟我在另一台pc中。如果我测试,为什么我必须使用xxxx:80。为什么有两个端口?我试图将这里发生的所有事情都包装在答案中。希望它能涵盖您的问题,如果仍然不清楚,请添加其他评论。基本上,映射到的端口(在您的情况下为80或90)由容器上运行的应用程序决定-要更改它,您需要先更改应用程序设置,然后更改映射。
docker run -d -p 8080:80 --name myapp1 dockerlocal
docker run -d -p 9090:80 --name myapp2 dockerlocal