Setting up docker: Enable Containers Feature - docker

Just started learning docker, I am going through tutorials to setup docker on my windows machine. The first step was to enable hyper-v where I ran the below command:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
Above ran fine.
Second step was to Enable Container feature where I ran the below command:
Enable-WindowsOptionalFeature -Online -FeatureName containers –All
Now the above command is giving me error as:
Enable-WindowsOptionalFeature : A positional parameter cannot be found that accepts argument 'All'.
At line:1 char:1
+ Enable-WindowsOptionalFeature -Online -FeatureName containers All
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Enable-WindowsOptionalFeature], ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.Dism.Commands.EnableWindowsOptionalFeatureCommand
I am running this on Powershell and my operating system is windows 11 pro.
I searched for this error by nothing related was helpful. Could anyone help me with this?
Thanks

Related

docker: error during connect: In the default daemon configuration on Windows, the docker client must be run with elevated privileges to connect

I'm trying to run Docker in process isolation mode on Windows Server 2019 (Docker Desktop does not work here, my VPS does not support Hyper-V).
I run this in PowerShell (all in Administrator mode)
docker run -it --isolation=process mcr.microsoft.com/windows/servercore:ltsc2019 cmd.exe /c ping 127.0.0.1 -t
Then I get error:
docker: error during connect: In the default daemon configuration on Windows, the docker client must be run with elevated privileges to connect.: Post http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.24/containers/create: open //./pipe/docker_engine: The system cannot find the file specified.
See 'docker run --help'.
I ran command & 'C:\Program Files\Docker\DockerCli.exe' -SwitchDaemon, as suggested here: Docker cannot start on Windows
However, DockerCli.exe does not exist in a clean Docker install:
As suggested here I tried copying the file DockerCli.exe from my local Windows 10 Docker Desktop installation and reran, but then I get:
Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly 'Docker.Core, Version=3.0.0.50646, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
at Docker.Cli.MainBackendCli.Run(IReadOnlyCollection`1 args)
at Docker.Cli.MainBackendCli.Main(String[] args)
Regardless, copying files from Docker Desktop does not feel like the right approach.
I then ran dockerd in PowerShell since that's the only other executable in that folder:
Since I'm a newbie, I'm not sure if I just started a container and if so, which one, I just see start., but no idea where that comes from or how I can configure it.
UPDATE 1
Based on Peter Wishart's suggestion I tried uninstall-Package -Name docker, but then I get
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
Here's the full code of what I tried:
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>
The pipe access that the error message mentions is a (probably unrelated) issue when docker client is run by non-admin users (see here).
I think the most likely explanation is that the docker service has failed to start.
When you ran dockerd you were actually starting an instance of the daemon - and the line API listen on //./pipe/docker_engine means that the system service hadn't started previously - as the instance you started could create the pipe.
If you stop the running dockerd instance and run:
Get-Service docker | Restart-Service
Get-WinEvent -logname application | where ProviderName -eq docker | sort TimeCreated
You should be able to compare the log output with your manual start of dockerd, and see if any errors are blocking the service from starting.
If the event log records API listen on //./pipe/docker_engine then Get-Service docker should show the service as running, and your docker commands should be ok.
[Edit]
Looks like the uninstall of docker was failing because the service doesn't exist.
Yet, the install is succeeding except for the service installation.
You can re-register the service with &'C:\Program Files\Docker\dockerd.exe' --register-service
Maybe this will fail if the VPS provider is somehow stopping services from being registered?
Another option is to run docker interactively in one shell with &'C:\Program Files\Docker\dockerd.exe' --run-service, and run your docker commands in another shell.
To resolve the issue, I just ran & 'C:\Program Files\Docker\Docker\DockerCli.exe' -SwitchDaemon in PowerShell and quit the Docker desktop and Run Docker Desktop as administrator.
Now open command prompt or powershell and run docker images or dockers ps command. It should work.
Go to PowerShell > run as administrator and run this code:
cd "C:\Program Files\Docker\Docker"
./DockerCli.exe -SwitchDaemon
To resolve the issue, I just ran Two Steps in PowerShell.
First,
cd 'C:\Program Files\Docker\Docker
and then,
/DockerCli.exe' -SwitchDaemon
After that, install the WSL Kernel on your machine, restart the WSL machine, then it is resolved.
This solution helped me
https://github.com/docker/for-win/issues/5919#issuecomment-658815006
cd C:\Program Files\Docker\Docker\resources dockerd.exe
Now execute
'docker version' on a new powershell as administrator
Ok so i followed 2 steps and my problem was resolved:
update wsl kernel, seamingly it is a must because docker needs it and it is not installed by default. so just close all docker realated stuff and run:
wsl --update
command in cmd .
I did what other guys said here:
C:\Program Files\Docker\Docker\DockerCli.exe -SwitchDaemon
and voila!
My solution was removing last edition and installing 4.9.1
One other thing to check is whether you have started the Desktop Client for Windows and accepted the License Agreement. I had restored from an image that hadn't had Docker started and was seeing this error. Nothing worked until I accepted the license.
I checked these boxes and it worked for me:

Docker Power up failed (vrc=VERR_NEM_VM_CREATE_FAILED, rc=E_FAIL (0X80004005)

I have problem with Docker.
I turned on and turn off Hyper-v, that's not help.
Hyper-v technology - ON ( in BIOS)
I have this error
That's help me:
'''
Hey Folks,I too faced above issue,finally I solved my issue following below steps:
1.opened C:\Program Files\Docker Toolbox
edited start file as "${DOCKER_MACHINE}" create -d virtualbox --virtualbox-no-vtx-check $PROXY_ENV "${VM}"
when docker toolbox was installed it will be as "${DOCKER_MACHINE}" create -d virtualbox $PROXY_ENV "${VM}"
if u see hyper vision launcher type status OFF then ts fine if it is AUTO then run bcdedit /set hypervisorlaunchtype off to change status to OFF
removed all temp files win+R type temp
4.rebooted my machine
5.open dockerquickstart it worked'''

Running docker inside Docker Windows Container for DevOps Buildagent

Im working with Microsoft Dynamics 365 Business Central. (ERP Software).
Im attempting to create build agents on my local server to set up Continious Integration with my projects.
On the buildserver i am running Docker Enterprise on Windows 2019.
When i spin up my dockeragent to facilitate the builds im experiencing an issue.
The dockeragent is asked by my CI flow to spin up another docker container called navcontainerhelper which is basically a docker container that contains the Business Central environment to build my application on.
However the navcontainerhelper doesnt know the docker commands since it doesnt include docker.
Ive researched and found that mounting the docker socket with -v is the way to do this however i cant seem to get that working.
When i create the agent i am using the following command:
docker run -v /var/run/docker.sock:/var/run/docker.sock -ti dockeragent:latest -e AZP_URL=<My azure url> -e AZP_TOKEN=<my azure token) -e AZP_AGENT_NAME=<my builder agent name>
when i attempt to execute this i get the following command which leads me to the mentioned conclusion.
docker : C:\Program Files\docker\docker.exe: Error response from daemon: invalid volume specification: '/var/run/docker.sock:/var/run/docker.sock'.
At C:\dockeragent\StartAgents.ps1:1 char:1
+ docker run -v /var/run/docker.sock:/var/run/docker.sock -ti dockerage ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (C:\Program File...n/docker.sock'.:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
See 'C:\Program Files\docker\docker.exe run --help'.
Could someone give me a pointer as to what i am doing wrong?
I have changed the script to use the named pipes instead for windows. it now mounts like this:
docker run -e AZP_URL=<My azure url> -e AZP_TOKEN=<my azure token) -e AZP_AGENT_NAME=<my builder agent name> -v \\.\pipe\docker_engine:\\.\pipe\docker_engine dockeragent:latest
However the container still refuses to recognize my docker command:
New-NavContainer : The term 'docker' is not recognized as the name of a cmdlet, function, script file, or operable
program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At C:\azp\agent\_work\***\s\scripts\Create-Container.ps***:36 char:***
+ New-NavContainer #parameters `
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (docker:String) [New-NavContainer], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException,New-NavContainer
PowerShell exited with code '***'.
Any pointers would be greatly appreciated!
in this case the answer was to use the named pipes like so:
-v \.\pipe\docker_engine:\\.\pipe\docker_engine
and to install the docker client into the container so it can talk to the docker engine
I was having trouble with the install, so I used one of the docker provided windows images from docker hub as my base image instead of a microsoft one. Followed the remained of the microsoft instructions. Started the container with the below command and everything worked smoothly.
`docker run --env-file agent.env -v \\.\pipe\docker_engine:\\.\pipe\docker_engine --name dockeragent dockeragent:latest`

Docker and hyper-v Issues

I want to configure docker with windows container. So i installed docker and enabled Hyper-v all features.
I have also execute this Command :
Enable-WindowsOptionalFeature -Online -FeatureName Containers -All
Error this coming when i try to run docker for windows application
Error coming when i execute docker version from CMD.
I've tried some solution on the google but the problem still remains.
Can someone knows how to solve?
Edit:
While execute command :
New-VMSwitch -Name "minikube" -AllowManagement $True -NetAdapterName
"minikube"
Error comes :
New-VMSwitch : Hyper-V encountered an error trying to access an object
on computer 'computer-name' because the object was not found. The object
might have been deleted. Verify that the Virtual Machine Management
service on the computer is running.
Try installing hyperv after install docker it may work

I'm Installing Docker but i'm confused about container, did i install or not, how may i confirm container is installed or not?

I'm new in docker, i have enabled Hyper-V and Container from Apps And Features but now i'm confused about container, should i externally install or is it built-in in windowS?
On either Windows 10 or Windows Server 2016 you'll need to setup the Docker engine. Using PowerShell:
Install-Package -Name docker -ProviderName DockerMsftProvider
See Microsoft's instructions here: https://learn.microsoft.com/en-us/virtualization/windowscontainers/quick-start/quick-start-windows-server
In addition to the Install process outlined above, you'll want to consider the following, using PowerShell:
1) New-NetFirewallRule -DisplayName 'Docker Inbound' -Profile #('Domain',
'Public', 'Private') -Direction Inbound -Action Allow -Protocol TCP -
LocalPort 2375
2) Setup the daemon.json file:
cd c:\programdata\docker\config\
new-item daemon.json -type file
set-content daemon.json
{ "hosts": ["tcp://0.0.0.0:2375", "npipe://"] }
3) Start the daemon at command prompt >dockerd
4) confirm dockerd process is running, and then proceed to have fun with Docker!

Resources