Docker Desktop для Windows с использованием Linux-контейнеров - ошибка прав доступа при запуске контейнера - PullRequest
1 голос
/ 19 октября 2019

Я следовал этому учебнику и использую VS2019 для создания Dockerfile. Я использую Docker Desktop в Windows 10, а мое приложение 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 -p 8080:80 codemazeblog/accountowner:build, я получаю следующую ошибку в powershell: C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error response from daemon: driver failed programming external connectivity on endpoint dazzling_chaplygin (e784aeb7f33b182e39d52e0ea37bb035feb6bcefdc53b0d2f4160dba7ec46a99): Error starting userland proxy: listen tcp 0.0.0.0:8080: bind: An attempt was made to access a socket in a way forbidden by its access permissions.

Я не уверен, что именно не так или как это исправить, поскольку я относительный новичок в 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"]

Ответы [ 2 ]

1 голос
/ 19 октября 2019

Итак, вот в чем дело. Я разделил ваш вопрос на 2 части, и я отвечу на них один за другим:


Часть 1 : вы получаете предупреждение системы безопасности "ПРЕДУПРЕЖДЕНИЕ О БЕЗОПАСНОСТИ: Вы создаете образ Dockerиз Windows против хоста Docker, отличного от Windows. Все файлы и каталоги, добавленные в контекст сборки, будут иметь разрешения '-rwxr-xr-x'. Рекомендуется дважды проверить и сбросить разрешения для конфиденциальных файлов и каталогов. ":

Ответ : Windows и Linux представляют собой две разные операционные системы и имеют 2 разных способа поддержки файлов, папок и их разрешений. В предупреждении говорится, что, поскольку вы создаете образ докера, который в конечном итоге будет работать на платформе, отличной от Windows, soo windows автоматически установил права доступа к файлу на -rwxr-xr-x, что означает, что файлы имеютразрешение на чтение, запись и выполнение для пользователя (-rwxr), выполнение и чтение для групп (-xr) и просто выполнение разрешения для других (-x) ---- См. здесь для получения дополнительных сведений о разрешениях. По сути, он предупреждает вас об установке разрешений в соответствии с вашим вариантом использования.


Часть 2 : ошибка, которую вы получаете в операторе запуска Docker:

Ответ : Попробуйте выполнить следующее

  1. Проверьте, заблокирован ли порт или используется другим процессом. (См. здесь для получения инструкций)
  2. Если это не так, запустите powershell или терминал, который вы используете для запуска команды запуска docker, под именем administrator .

Спасибо.

0 голосов
/ 19 октября 2019

Вам необходимо переключиться на контейнер Windows, как указано здесь https://docs.docker.com/docker-for-windows/images/whale-icon-systray-hidden.png

https://docs.docker.com/docker-for-windows/.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...