docker: ошибка при подключении: в конфигурации демона по умолчанию в Windows клиент docker должен запускаться с повышенными привилегиями для подключения

Я пытаюсь запустить Docker в режиме изоляции процессов на Windows Server 2019 (Docker Desktop здесь не работает, мой VPS не поддерживает Hyper-V). Я запускаю это в PowerShell (все в режиме администратора) docker run -it --isolation=process mcr.microsoft.com/windows/servercore:ltsc2019 cmd.exe /c ping 127.0.0.1 -t

Затем я получаю сообщение об ошибке:

docker: ошибка при подключении: в конфигурации демона по умолчанию в Windows клиент docker должен быть запущен с повышенными привилегиями для подключения.: Сообщение http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.24/containers/create: open //./pipe/docker_engine: Система не может найти указанный файл. См. 'docker run --help'.

Я выполнил команду & 'C:\Program Files\Docker\DockerCli.exe' -SwitchDaemon, как предлагается здесь: Docker не запускается в Windows

Однако DockerCli.exe не существует в чистой установке Docker:
введите здесь описание изображения

Как было предложено здесь, я попытался скопировать файл DockerCli.exe с моего локального рабочего стола Windows 10 Docker. установка и перезапуск, но тогда я получаю:

Необработанное исключение: System.IO.FileNotFoundException: не удалось загрузить файл или сборку «Docker.Core, версия = 3.0.0.50646, культура = нейтральная, PublicKeyToken = null» или одну из ее зависимостей. Система не может найти указанный файл. в Docker.Cli.MainBackendCli.Run(аргументы IReadOnlyCollection`1) в Docker.Cli.MainBackendCli.Main(аргументы String[])

Несмотря на это, копирование файлов из Docker Desktop не кажется правильным подходом.

Затем я запустил dockerd в PowerShell, так как это единственный исполняемый файл в этой папке: введите здесь описание изображения

Поскольку я новичок, я не уверен, что я только что запустил контейнер, и если да, то какой, я просто вижу start., но понятия не имею, откуда это взялось и как я могу его настроить.

ОБНОВЛЕНИЕ 1

Основываясь на предложении Питера Уишарта, я попробовал uninstall-Package -Name docker, но потом получил

uninstall-Package : No package found for 'docker'. At line:1 char:1
+ uninstall-Package -Name docker
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (Microsoft.Power...ninstallPackage:UninstallPackage) [Uninstall-Package]
   , Exception
    + FullyQualifiedErrorId : NoMatchFound,Microsoft.PowerShell.PackageManagement.Cmdlets.UninstallPackage

Вот полный код того, что я пробовал:

PS C:\Users\Administrator> uninstall-Package -Name docker
uninstall-Package : No package found for 'docker'.
At line:1 char:1
+ uninstall-Package -Name docker
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (Microsoft.Power...ninstallPackage:UninstallPackage) [Uninstall-Package]
   , Exception
    + FullyQualifiedErrorId : NoMatchFound,Microsoft.PowerShell.PackageManagement.Cmdlets.UninstallPackage

PS C:\Users\Administrator> docker

Usage:  docker [OPTIONS] COMMAND

A self-sufficient runtime for containers

Options:
      --config string      Location of client config files (default
                           "C:\\Users\\Administrator\\.docker")
  -c, --context string     Name of the context to use to connect to the
                           daemon (overrides DOCKER_HOST env var and
                           default context set with "docker context use")
  -D, --debug              Enable debug mode
  -H, --host list          Daemon socket(s) to connect to
  -l, --log-level string   Set the logging level
                           ("debug"|"info"|"warn"|"error"|"fatal")
                           (default "info")
      --tls                Use TLS; implied by --tlsverify
      --tlscacert string   Trust certs signed only by this CA (default
                           "C:\\Users\\Administrator\\.docker\\ca.pem")
      --tlscert string     Path to TLS certificate file (default
                           "C:\\Users\\Administrator\\.docker\\cert.pem")
      --tlskey string      Path to TLS key file (default
                           "C:\\Users\\Administrator\\.docker\\key.pem")
      --tlsverify          Use TLS and verify the remote
  -v, --version            Print version information and quit

Management Commands:
  app*        Docker Application (Docker Inc., v0.8.0)
  builder     Manage builds
  cluster*    Manage Mirantis Container Cloud clusters (Mirantis Inc., v1.9.0)
  config      Manage Docker configs
  container   Manage containers
  context     Manage contexts
  image       Manage images
  manifest    Manage Docker image manifests and manifest lists
  network     Manage networks
  node        Manage Swarm nodes
  plugin      Manage plugins
  registry*   Manage Docker registries (Docker Inc., 0.1.0)
  secret      Manage Docker secrets
  service     Manage services
  stack       Manage Docker stacks
  swarm       Manage Swarm
  system      Manage Docker
  trust       Manage trust on Docker images
  volume      Manage volumes

Commands:
  attach      Attach local standard input, output, and error streams to a running container
  build       Build an image from a Dockerfile
  commit      Create a new image from a container's changes
  cp          Copy files/folders between a container and the local filesystem
  create      Create a new container
  diff        Inspect changes to files or directories on a container's filesystem
  events      Get real time events from the server
  exec        Run a command in a running container
  export      Export a container's filesystem as a tar archive
  history     Show the history of an image
  images      List images
  import      Import the contents from a tarball to create a filesystem image
  info        Display system-wide information
  inspect     Return low-level information on Docker objects
  kill        Kill one or more running containers
  load        Load an image from a tar archive or STDIN
  login       Log in to a Docker registry
  logout      Log out from a Docker registry
  logs        Fetch the logs of a container
  pause       Pause all processes within one or more containers
  port        List port mappings or a specific mapping for the container
  ps          List containers
  pull        Pull an image or a repository from a registry
  push        Push an image or a repository to a registry
  rename      Rename a container
  restart     Restart one or more containers
  rm          Remove one or more containers
  rmi         Remove one or more images
  run         Run a command in a new container
  save        Save one or more images to a tar archive (streamed to STDOUT by default)
  search      Search the Docker Hub for images
  start       Start one or more stopped containers
  stats       Display a live stream of container(s) resource usage statistics
  stop        Stop one or more running containers
  tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
  top         Display the running processes of a container
  unpause     Unpause all processes within one or more containers
  update      Update configuration of one or more containers
  version     Show the Docker version information
  wait        Block until one or more containers stop, then print their exit codes

Run 'docker COMMAND --help' for more information on a command.

To get more help with docker, check out our guides at https://docs.docker.com/go/guides/
PS C:\Users\Administrator> Get-PackageProvider -ListAvailable

Name                     Version          DynamicOptions
----                     -------          --------------
DockerMsftProvider       1.0.0.8          Update
msi                      3.0.0.0          AdditionalArguments
msu                      3.0.0.0
NuGet                    2.8.5.208        Destination, ExcludeVersion, Scope, SkipDependencies, Headers, FilterOnTag...
PowerShellGet            1.0.0.1          PackageManagementProvider, Type, Scope, AllowClobber, SkipPublisherCheck, ...
Programs                 3.0.0.0          IncludeWindowsInstaller, IncludeSystemComponent


PS C:\Users\Administrator> Get-Package -Name Docker -ProviderName DockerMsftProvider

Name                           Version          Source                           ProviderName
----                           -------          ------                           ------------
docker                         20.10.0          DockerDefault                    DockerMsftProvider


PS C:\Users\Administrator> Install-Package -Name docker -ProviderName DockerMsftProvider

The package(s) come(s) from a package source that is not marked as trusted.
Are you sure you want to install software from 'DockerDefault'?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "N"): y
PS C:\Users\Administrator> Install-Package -Name docker -ProviderName DockerMsftProvider

The package(s) come(s) from a package source that is not marked as trusted.
Are you sure you want to install software from 'DockerDefault'?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "N"): A
PS C:\Users\Administrator> uninstall-Package -Name docker
WARNING: Docker Service is not available.
uninstall-Package : The property 'Status' cannot be found on this object. Verify that the property exists.
At line:1 char:1
+ uninstall-Package -Name docker
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (Microsoft.Power...ninstallPackage:UninstallPackage) [Uninstall-Package],
   Exception
    + FullyQualifiedErrorId : PropertyNotFoundStrict,Microsoft.PowerShell.PackageManagement.Cmdlets.UninstallPackage

PS C:\Users\Administrator>

person Flo    schedule 19.04.2021    source источник


Ответы (1)


Доступ к каналу, о котором упоминается в сообщении об ошибке, является проблемой (вероятно, не связанной с этим), когда docker клиент запускается пользователями без прав администратора (см. здесь).

Я думаю, что наиболее вероятным объяснением является то, что служба докеров не запустилась.

Когда вы запускали dockerd, вы фактически запускали экземпляр демона, а строка API listen on //./pipe/docker_engine означает, что системная служба ранее не запускалась, поскольку запущенный вами экземпляр мог создать канал.

Если вы остановите работающий экземпляр dockerd и запустите:

 Get-Service docker | Restart-Service
 Get-WinEvent -logname application | where ProviderName -eq docker | sort TimeCreated

Вы должны иметь возможность сравнить вывод журнала с ручным запуском dockerd и посмотреть, не блокируют ли какие-либо ошибки запуск службы.

Если в журнале событий записано API listen on //./pipe/docker_engine, то Get-Service docker должно показать, что служба запущена, и ваши docker команды должны быть в порядке.

[Редактировать]

Похоже, удаление докера не удалось, потому что служба не существует. Тем не менее, установка прошла успешно, за исключением установки службы.

Вы можете перерегистрировать услугу с помощью &'C:\Program Files\Docker\dockerd.exe' --register-service

Может быть, это не удастся, если провайдер VPS каким-то образом остановит регистрацию сервисов?

Другой вариант — запустить докер в интерактивном режиме в одной оболочке с помощью &'C:\Program Files\Docker\dockerd.exe' --run-service и запустить команды докера в другой оболочке.

person Peter Wishart    schedule 19.04.2021
comment
Когда я запускаю `Get-Service docker | Restart-Service` Я получаю сообщение об ошибке: Get-Service: не удается найти службу с именем службы «docker». В строке: 1 символ: 1 + докер Get-Service | Restart-Service + ~~~~~~~~~~~~~~~~~~+ CategoryInfo: ObjectNotFound: (docker:String) [Get-Service], ServiceCommandException + FullyQualifiedErrorId: NoServiceFoundForGivenName,Microsoft.PowerShell.Commands. GetServiceCommand - person Flo; 19.04.2021
comment
Ладно, это нехорошо. Установка докера должна была настроить это. - person Peter Wishart; 19.04.2021
comment
Может быть, это актуально, но я никогда не видел докер в services.msc, должен ли он быть там? Если да, то есть ли способ настроить это вручную? - person Flo; 20.04.2021
comment
Да, это обязательно. Вероятно, лучше удалить докер (uninstall-Package -Name docker) и переустановить. - person Peter Wishart; 20.04.2021
comment
Я пробовал это, но это тоже не работает, не могли бы вы взглянуть на обновление 1? - person Flo; 20.04.2021
comment
Опубликовали редактирование с инструкциями по проверке регистрации докера в качестве службы (в случае успеха повторите запуск с правильным именем службы). Но я боюсь, что вы приближаетесь к точке убывающей отдачи для этой системы. В крайнем случае вы можете запустить докер в интерактивном режиме и запустить клиент докера в другой оболочке. - person Peter Wishart; 21.04.2021
comment
лол, буквально через 1 секунду после твоего ответа началась награда, сейчас попробую :) - person Flo; 21.04.2021
comment
Я только что отредактировал инструкции, чтобы использовать встроенный докер для исправления службы - возможно, лучше, чем использовать sc.exe - person Peter Wishart; 21.04.2021
comment
Теперь он работает, и я вижу, что служба Docker Engine работает, в итоге я несколько раз переустанавливал и перезапускал VPS. Я дам вам правильный ответ и вознаграждение, так как это может помочь другим. Спасибо еще раз! - person Flo; 22.04.2021
comment
Еще раз спасибо, можно еще раз воспользоваться вашим опытом? Если бы вы взглянули на этот stackoverflow.com/questions/67239760/ - person Flo; 24.04.2021
comment
Да, Docker не запущен, выдает эту ошибку. В качестве первого шага должна была быть самопроверка. - person Arthur; 24.06.2021