Visual studio Docker Desktop for Windows使用Linux容器-运行容器时出现权限错误
我一直在关注这一点,并一直在使用VS2019创建Dockerfile。我在Windows 10上使用Docker Desktop,我的应用程序“AccountOwnerServer”使用Linux容器。从Dockerfile构建时,它成功地完成了步骤1-20,没有问题,但在Powershell中打印了以下安全警告: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
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容器出错。总而言之,这是端口问题。