Visual studio Docker Desktop for Windows使用Linux容器-运行容器时出现权限错误

Visual studio Docker Desktop for Windows使用Linux容器-运行容器时出现权限错误,visual-studio,docker,asp.net-core,.net-core,Visual Studio,Docker,Asp.net Core,.net Core,我一直在关注这一点,并一直在使用VS2019创建Dockerfile。我在Windows 10上使用Docker Desktop,我的应用程序“AccountOwnerServer”使用Linux容器。从Dockerfile构建时,它成功地完成了步骤1-20,没有问题,但在Powershell中打印了以下安全警告: SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker

我一直在关注这一点,并一直在使用VS2019创建Dockerfile。我在Windows 10上使用Docker Desktop,我的应用程序“AccountOwnerServer”使用Linux容器。从Dockerfile构建时,它成功地完成了步骤1-20,没有问题,但在Powershell中打印了以下安全警告:

SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.
当我使用
docker run--rm-it-p8080:80 codemazeblog/accountowner:build运行容器时,我在powershell中遇到以下错误:
C:\Program Files\docker\docker\Resources\bin\docker.exe:来自守护进程的错误响应:驱动程序未能在端点上编程外部连接。\u chaplygin(e784aeb7f33b182e39d52e0ea37bb035feb6bcefdc53b0d2f4160dba7ec46a99):启动userland代理时出错:侦听tcp 0.0.0.0:8080:bind:试图以访问权限禁止的方式访问套接字。

我不确定到底出了什么问题,也不知道如何解决,因为我是Docker的新手

Dockerfile

WORKDIR /app
EXPOSE 80

FROM microsoft/aspnetcore-build:2.0-stretch AS build
WORKDIR /src
COPY ["AccountOwnerServer/AccountOwnerServer.csproj", "AccountOwnerServer/"]
COPY ["Contracts/Contracts.csproj", "Contracts/"]
COPY ["Entities/Entities.csproj", "Entities/"]
COPY ["LoggerService/LoggerService.csproj", "LoggerService/"]
COPY ["Repository/Repository.csproj", "Repository/"]
RUN dotnet restore "AccountOwnerServer/AccountOwnerServer.csproj"
COPY . .
WORKDIR "/src/AccountOwnerServer"
RUN dotnet build "AccountOwnerServer.csproj" -c Release -o /app/build

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

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "AccountOwnerServer.dll"]

问题是这样的。我把你的问题分为两部分,我将逐一回答:


第1部分:您会收到一条安全警告“安全警告:您正在针对非Windows Docker主机从Windows生成Docker映像。添加到生成上下文的所有文件和目录都将具有“-rwxr-xr-x”权限。建议仔细检查并重置敏感文件和目录的权限。”:

回答:Windows和Linux是两种不同的操作系统,有两种不同的方式来维护文件、文件夹及其权限。警告试图说明的是,由于您构建的docker映像最终将在非Windows平台上运行,所以Windows已自动设置文件权限ns到'-rwxr-xr-x',这意味着文件对用户(-rwxr)具有读取、写入和执行权限,对组(-xr)具有执行和读取权限,对其他人(-x)具有仅执行权限--有关权限的详细信息,请参阅。它基本上警告您根据您的用例设置权限


第2部分:您在docker run语句中收到的错误:

回答:尝试执行以下操作

  • 检查端口是否被其他进程阻塞或使用。(请参阅操作方法)
  • 如果不是,请以管理员身份运行用于运行docker run命令的powershell或终端

  • 您需要切换到此处提到的Windows容器

    .

    这对我很有效

    Stop-Service docker
    Stop-service hns
    Start-service hns
    Start-Service docker
    docker network prune
    

    我在Windows容器上遇到了类似的问题。在这种情况下,您可以运行Linux容器。如果我在Powershell中运行
    docker run-it-p 8000:8888 codemazeblog/accountowner:runtime
    ,容器运行正常。如果我导航到
    http://localhost:8080/swagger/
    ,我有一个正在运行的应用程序,使用DockerI am running Powershell作为管理员。我刚刚试过运行
    docker run-it-p 8000:8888 codemazeblog/accountowner:runtime
    ,应用程序运行良好。更改端口仅仅意味着您有一个被阻止的端口,或者系统上的应用程序/服务保留了该端口。如果端口是绝对必要的,您需要找到并杀死该应用程序。看起来就像你在回答的第2部分中是正确的一样。我最初认为这不是端口问题,因为
    netstat-ano | findstr 80
    没有产生结论性的结果,并且给出的错误没有提到“使用中的地址”。但是,在
    docker run
    命令中更改端口可以按预期工作。是的。我认为服务已经保留了端口具有管理员权限的端口,也可能是docker容器出错。总而言之,这是端口问题。