Docker daemon windows 7 : concurrent downloads - docker

I've installed the docker toolbox on my machine. Once I try to pull down some images from a repository with docker pull, several of them "timeout". The docker documentation recommends that I configure the docker daemon to configure the number of concurrent download sessions:
dockerd --max-concurrent-downloads 1
However, when I execute the above command, I get the following error:
Error starting daemon: This version of Windows does not support the docker daemon
If I run docker.exe daemon I get the following error:
`docker daemon` is not supported on Windows. Please run `dockerd` directly
Is there a different way I can limit the number of concurrent downloads with the docker toolbox?

Docker toolbox nests the docker daemon (dockerd) inside a virtual machine that you can modify using docker-machine ssh.
The typical installation of Docker toolbox uses the Oracle Virtualbox driver, which uses by default the boot2docker image.
According to the documentation of boot2docker, you can add extra arguments for the docker deamon (ie. dockerd) by modifying the /var/lib/boot2docker/profile file:
Docker daemon options
If you need to customize the options used to
start the Docker daemon, you can do so by adding entries to the
/var/lib/boot2docker/profile file on the persistent partition inside
the Boot2Docker virtual machine. Then restart the daemon.
If you are using this configuration (virtualbox + boot2docker), then the following command line might help you. Execute it in your Window shell, it will add the dockerd argument --max-concurrent-downloads with the value 1 for you, in the machine called "default":
docker-machine ssh default "echo \"EXTRA_ARGS=\\\"\$EXTRA_ARGS --max-concurrent-downloads 1\\\"\" | sudo tee -a /var/lib/boot2docker/profile"
Do not forget to restart your machine with docker-machine restart default.
By doing so I was able to add any dockerd argument (mind the version of dockerd used by boot2docker though).

Related

How can I access wsl2 which is used by Docker desktop?

I want to transfer a Docker image from my Windows10 PC to another one, Fedora, using rsync. I can't use WSL, I need WSL2 as the compiler says:
ubu#DESKTOP-QL4RO3V:/mnt/c/Windows/system32$ docker images
The command 'docker' could not be found in this WSL 1 distro.
We recommend to convert this distro to WSL 2 and activate
the WSL integration in Docker Desktop settings.
For details about using Docker Desktop with WSL 2, visit:
https://docs.docker.com/go/wsl2/
But I think that as I have Docker desktop it is using WSL2:
But I don't know how to run the wsl2 Docker is using for my own.
PS C:\Users\antoi> wsl -l -v
NAME STATE VERSION
* Ubuntu Running 1
docker-desktop-data Running 2
docker-desktop Running 2
Docker Desktop images, containers, and volumes are stored in the special docker-desktop-data. As noted in this Super User question and my answer there, docker-desktop-data is not bootable (by design).
If you really had to get to the filesystem, I've documented a way to do so there. But in general, you should not need to do this.
Instead, use the normal docker commands (from WSL2, PowerShell, or CMD) to save the image to a tar file as documented in this answer:
docker save -o <image.tar> <image_name>
Then transfer the file using rsync or other means, and on the destination machine, import it via:
docker load -i <image.tar>
Again, that's from WSL2, PowerShell, or CMD. But in your case, the Ubuntu instance is WSL1. That won't work for Docker. You'll need to convert it to WSL2.
Just in case, I always recommend backing up your instance before converting it. From PowerShell:
wsl --export Ubuntu ubuntu_backup.tar
Then, once you have the backup:
wsl --set-version Ubuntu 2
wsl --set-default-version 2 # if desired
After conversion, you shouldn't see that error when running docker in Ubuntu.
Side note -- Docker Desktop "injects" the docker command into any WSL2 instance that you set in the "WSL Integration" tab in Settings. This should default to your "default" WSL2 instance, which (from your screenshot) is Ubuntu. The "real" docker command is inside docker-desktop, but it's linked into Ubuntu for you.
So by default, you should have all docker functionality directly in your Ubuntu instance. Neither docker-desktop nor docker-desktop-data are designed to be used directly by the end-user.
You can access docker desktop WSL using the following command
wsl -d docker-desktop

docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? Linux Bash Shell on windows 10

I am new to Docker. I'm trying to work with it on windows.
I have Windows 10 Family so I installed Linux Bash Shell.
When I run this command:
$ docker run hello-world
I get :
docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.
And when I run
$ systemctl status docker
I get
System has not been booted with systemd as init system (PID 1). Can't operate
For anyone using WSL2 and seeing an identical error message, look at https://github.com/MicrosoftDocs/WSL/issues/457#issuecomment-511495846
Powershell
wsl -l -v
NAME STATE VERSION
* Ubuntu-20.04 Running 2
Ubuntu
$ docker run hello-world
docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.
$ systemctl status docker
System has not been booted with systemd as init system (PID 1). Can't operate.
$ sudo /etc/init.d/docker start
* Starting Docker: docker [ OK ]
$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
b8dfde127a29: Pull complete
Digest: sha256:308866a43596e83578c7dfa15e27a73011bdd402185a84c5cd7f32a88b501a24
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
It seems like you wont be able to use docker in Windows 10 family, since docker Desktop requires specific Windows version, as said in official documentation.
System Requirements
Windows 10 64-bit: Pro, Enterprise, or Education (Build 15063 or later).
What you can try is to run linux-based virtual machine on you Windows host, and run docker inside of it. But even if you succeeded, you will lose all advantages of the docker in resources consumption.
Just run the Docker Daemon with.
sudo dockerd &
The sudo make it run as super user.
Dockerd is DOCKERDaemon
The single & at the end just make it run in the background.
The issue here is that from the error message, it states that you are using WSL (Windows Sub-system for Linux Version 1), this version did not have Docker support as it is not a full Linux kernel, but an translation layer between a Linux user-space and then translated to Windows Kernel commands.
Running the wsl --list -v command will show you the version you are using:
You can install WSL version 2, which has a Microsoft provided full Linux Kernel running using Hyper-V infrastructure (but not full Hyper-V). This way it runs on Windows Home, Education, and Professional. And here you can run a Linux Instance and the install Docker.
Windows Subsystem for Linux Installation Guide

How do I access minikube docker daemon on Windows?

I installed minikube and now I want to create my docker containers, but how do I run the docker commands? I tried the following from command prompt
But it does not recognize docker as a command.
Also I tried from PowerShell with the same result, docker not recognized.
I currently only have minikube installed on my workstation because I was given the impression from comments to a previous question that I did not need Docker Desktop (see Unable to connect to running docker containers (minikube docker daemon))
In this SO question there is an answer that will show you 3 ways how to make Minikube and Docker work on Windows:
Scenarios are like this:
1) Use Docker, and minikube with Hyper-V (you will find instruction in
an answer above) Enable Hyper-V, install Docker, use minikube with
arguments minikube start --vm-driver hyperv --hyperv-virtual-switch
"<created Hyper-V switch name>" In the same time you will be able to
interact with Docker in normal way. Use kubectl/minikube commands for
your Kubernetes cluster and Docker commands for Docker. 2) Use
VirtualBox for Kubernetes and Docker toolbox for Docker minikube
start --vm-driver=virtualbox
3) Use Docker for Windows and Kubernetes in Docker
I believe this will solve your issue. Please, let me know if that helped.

Why docker-daemon is not accessible in minikube VM?

I have installed minikube and started it with it's default virtual machine so basically started the minikube with minikube start. In minikube vm which i have accessed through minikube ssh i am trying to build my dockerfile after mounting the local file system but it's showing error Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
I checked the ActiveState of docker through systemctl show --property ActiveState docker and it's showing failed but the docker version is showing me all the normal details like version built etc.
This is the statement that i am trying to execute : $ sudo docker build --file=Dockerfile --tag=demo-backend:latest --rm=true .
Should i install docker seperatley and if not how should access docker in VM which is already present in my system
It looks like somehow docker has not started properly.
Please try to execute sudo systemctl start docker and let me know if that was the issue.
EDIT:
Adding more info from the comments in order to supplement the answer:
I had to set the docker environment variable to local instance of
docker running in minikube through this command: eval $(minikube
docker-env) and then restart the docker and all of this has to done in
the same shell in which i aim to access the docker otherwise it does
not works. this made me acces the docker from minikube – rehan

Why does docker ps not show my minikube's docker containers?

I am running minikube using the instructions at
https://kubernetes.io/docs/tutorials/hello-minikube/
I started minikube:
$ minikube start --vm-driver=hyperkit
and verified that it is successfully running.
I am running 'Docker Community Edition' version 18.06.1-ce-mac73.
$ minikube ssh
is working fine.
However when I do
$ docker ps
on my mac os host, it doesn't show any containers. However, when I do
$ docker ps
after doing minikube ssh, I see about 20 containers.
So, where are the docker containers really running? Why does docker ps not show any containers on my mac?
Thank you.
You can use the following command to configure your Docker Host address:
eval $(minikube docker-env)
Then, when you run docker ps, you should see your containers. Read more here.
Docker containers are not running on your MAC host.
They are running on a VM where you can do minikube ssh to that VM.
The docker ps shows the containers in there inside that VM.
That's expected because you are using hyperkit driver to work as a hypervisor & launch lightweight virtual machines. Think of it as virtualbox launching VMs for you & complete k8s cluster is deployed into those VMs, all of them are well integrated.
Use below to get your virtual machine address or the server where these containers are actually running -
$ minikube ip
Ref -
https://github.com/moby/hyperkit
Since I can't add a comment:
To revert the change in your shell, use
eval $(minikube docker-env -u)
as answered here: How do I undo the command $ eval "$(docker-machine env blog)"

Resources