TL;DR:
Q: Can Windows containers run on Linux?
A: No. They cannot.
Containers are using the underlying operating system resources and drivers, so Windows containers can run on Windows only, and Linux containers can run on Linux only.
Q: But what about Docker for Windows? Or other VM-based solutions?
A: Docker for Windows allows you to simulate running Linux containers on Windows, but under the hood a Linux VM is created, so still Linux containers are running on Linux, and Windows containers are running on Windows.
Bonus: Read this very nice article about running Linux docker containers on Windows.
Q: So, what should I do with a .NET Framework 462 application, if I would like to run in a container?
A: It depends. Consider the following recommendations:
-
If it is possible, move to .NET Core. Since .NET Core brings support to most major features of .NET Framework, and .NET Framework 4.8 will be the last version of .NET framework
-
If you cannot migrate to .NET Core — As @Sebastian mentioned — you can convert your libraries to .NET Standard, and have two versions of the application — one on .NET Framework 4.6.2, and one on .NET Core — it is not always obvious. Visual Studio supports it pretty well (with multi-targeting), but some dependencies can require extra care.
-
(Less recommended) In some cases, you can run Windows containers. Windows containers are becoming more and more mature, with better support in platforms like Kubernetes. But to be able to run .NET Framework code, you still need to run on base image of «Server Core», which occupies about 1.4 GB. In same rare cases, you can migrate your code to .NET Core, but still run on Windows Nano server, with an image size of 95 MB.
Leaving also the old updates for history
Update 2: 08.2018
If you are using Docker-for-Windows, you can run now both Windows and Linux containers simultaneously: Running Docker Windows and Linux Containers Simultaneously
Bonus: Not directly related to the question, but you can now run not only the Linux container itself, but also an orchestrator like Kubernetes: Kubernetes is Now Available In Docker Desktop Stable Channel
Updated at 2018:
Original answer in general is right, BUT several months ago, Docker added experimental feature LCOW (official GitHub repository).
From this post:
Doesn’t Docker for Windows already run Linux containers? That’s right.
Docker for Windows can run Linux or Windows containers, with support
for Linux containers via a Hyper-V Moby Linux VM (as of Docker for
Windows 17.10 this VM is based on LinuxKit).The setup for running Linux containers with LCOW is a lot simpler than
the previous architecture where a Hyper-V Linux VM runs a Linux Docker
daemon, along with all your containers. With LCOW, the Docker daemon
runs as a Windows process (same as when running Docker Windows
containers), and every time you start a Linux container Docker
launches a minimal Hyper-V hypervisor running a VM with a Linux
kernel, runc and the container processes running on top.Because there’s only one Docker daemon, and because that daemon now
runs on Windows, it will soon be possible to run Windows and Linux
Docker containers side-by-side, in the same networking namespace. This
will unlock a lot of exciting development and production scenarios for
Docker users on Windows.
Original:
As mentioned in comments by @PanagiotisKanavos, containers are not for virtualization, and they are using the resources of the host machine. As a result, for now a Windows container cannot run «as-is» on a Linux machine.
But — you can do it by using VM — as it works on Windows. You can install a Windows VM on your Linux host, which will allow to run Windows containers.
With it, IMHO running it this way in a production environment will not be the best idea.
Also, this answer provides more details.
Running a Windows Docker container on a Linux host can be a challenging task, as the two operating systems have different architectures and require different configurations. However, it is possible to run a Windows container on a Linux host using a few different methods. These methods include using virtualization software, using the Windows Subsystem for Linux (WSL), and using a tool like Docker Machine.
Method 1: Virtualization Software
To run a Windows Docker container on a Linux host, you can use virtualization software like VirtualBox or VMware. Here are the steps to follow:
-
Install virtualization software on your Linux host. In this example, we will use VirtualBox.
-
Download the Windows Docker image from the Docker Hub registry:
docker pull mcr.microsoft.com/windows/servercore:ltsc2019
-
Create a new virtual machine in VirtualBox with the following settings:
- Name: Windows Container
- Type: Microsoft Windows
- Version: Windows Server 2019 (64-bit)
- Memory: 4 GB
- Hard disk: Create a new virtual hard disk with at least 30 GB of space
-
Start the virtual machine and install Docker Desktop for Windows.
-
Open a PowerShell console in the virtual machine and run the following command to switch Docker to use Windows containers:
& $Env:ProgramFiles\Docker\Docker\DockerCli.exe -SwitchDaemon
-
Pull the Windows Docker image again to make sure it’s available for the Windows Docker daemon:
docker pull mcr.microsoft.com/windows/servercore:ltsc2019
-
Run the Windows Docker container:
docker run -it mcr.microsoft.com/windows/servercore:ltsc2019 cmd
This will start a command prompt inside the Windows Docker container.
That’s it! You can now use a Windows Docker container on your Linux host using virtualization software.
Method 2: Windows Subsystem for Linux (WSL)
To run a Windows Docker container on a Linux host using Windows Subsystem for Linux (WSL), follow these steps:
- Install Docker on your Linux host and make sure it is running properly.
- Install WSL on your Windows machine and make sure it is running properly.
- Open a WSL terminal and run the following command to download the Windows Docker image:
docker pull mcr.microsoft.com/windows/servercore:ltsc2019
- Run the following command to start the container:
docker run -it mcr.microsoft.com/windows/servercore:ltsc2019 cmd.exe
- You should now be inside the container’s command prompt. To exit the container, simply type «exit».
That’s it! You have successfully run a Windows Docker container on a Linux host using Windows Subsystem for Linux (WSL).
Note: You may need to enable virtualization in your BIOS settings for this to work properly.
Code Examples:
docker pull mcr.microsoft.com/windows/servercore:ltsc2019
docker run -it mcr.microsoft.com/windows/servercore:ltsc2019 cmd.exe
Method 3: Docker Machine
To run a Windows Docker container on a Linux host using Docker Machine, you can follow these steps:
-
Install Docker Machine on your Linux host machine.
-
Create a new Docker Machine with the «virtualbox» driver. This will create a virtual machine that will act as the host for the Windows Docker container.
docker-machine create --driver virtualbox windows
- Set the environment variables for the new Docker Machine.
eval $(docker-machine env windows)
- Pull the Windows Docker image from the Docker Hub.
docker pull mcr.microsoft.com/windows/servercore:ltsc2019
- Run the Windows Docker container on the new Docker Machine.
docker run -it mcr.microsoft.com/windows/servercore:ltsc2019 cmd
- You can now interact with the Windows container as if it were running on a Windows host.
Note: Make sure that your Linux host machine has enough resources to run the virtual machine and the Windows Docker container.
That’s it! With Docker Machine, you can easily run a Windows Docker container on a Linux host machine.
No, you cannot run Windows containers directly on Linux. But you can run Linux on Windows. You can change between OS containers Linux and Windows by right-clicking on the docker in the tray menu. Containers use the OS kernel.
Can I run Windows in a Docker container?
The Docker daemon provides each container with any necessary kernel-level properties so that the containerized application can run. The Windows Docker Desktop has the feature of providing a Linux Subsystem; and in this case, running a Linux container can ultimately run on Windows.
Also Read: What does ps mean in Docker ps?
Can I run Windows 10 in a Docker?
Docker works cross-platform and such supports execution on a Windows host, including Windows 10 (Pro or Enterprise). This makes Windows 10 a perfect development environment for Docker use-cases. On top of this, Windows is also the only platform, for now at least, that can run Windows and Linux based containers.
Do containers run on Linux?
You can run both Linux and Windows programs and executables in Docker containers. The Docker platform runs natively on Linux (on x86-64, ARM and many other CPU architectures) and on Windows (x86-64). Docker Inc. builds products that let you build and run containers on Linux, Windows and macOS.
What is Kubernetes vs Docker?
A fundamental difference between Kubernetes and Docker is that Kubernetes is meant to run across a cluster while Docker runs on a single node. Kubernetes is more extensive than Docker Swarm and is meant to coordinate clusters of nodes at scale in production in an efficient manner.
Is Docker better Windows or Linux?
From a technical standpoint, there is no real difference between using Docker on Windows and Linux. You can achieve the same things with Docker on both platforms. I don’t think you can say that either Windows or Linux is “better” for hosting Docker.
Can Docker containers have different OS?
No, it does not. Docker uses containerisation as a core technology, which relies on the concept of sharing a kernel between containers. If one Docker image relies on a Windows kernel and another relies on a Linux kernel, you cannot run those two images on the same OS.
Is Hyper-V required for Docker?
README for Docker Toolbox and Docker Machine users: Microsoft Hyper-V is required to run Docker Desktop. The Docker Desktop Windows installer enables Hyper-V if required, and restarts your machine.
Is Docker better than VM?
Though Docker and virtual machines have their advantages over hardware devices, Docker is the more efficient of the two in terms of resource utilization. If two organizations were completely identical and running the same hardware, then the company using Docker would be able to sustain more applications.
How can I tell if Docker is running on Linux?
The operating-system independent way to check whether Docker is running is to ask Docker, using the docker info command. You can also use operating system utilities, such as sudo systemctl is-active docker or sudo status docker or sudo service docker status , or checking the service status using Windows utilities.
How do Containers run on Linux?
Linux containers run natively on the operating system, sharing it across all of your containers, so your apps and services stay lightweight and run swiftly in parallel. Linux containers are another evolutionary leap in how we develop, deploy, and manage applications.
How do I use containers in Linux?
How to start using containers on Linux
- Install LXC: sudo apt-get install lxc.
- Create a container: sudo lxc-create -t fedora -n fed-01.
- List your containers: sudo lxc-ls.
- Start a container: sudo lxc-start -d -n fed-01.
- Get a console for your container: sudo lxc-console -n fed-01.
Can we run Windows Docker container on Linux?
No, Windows Docker containers cannot be run directly on Linux. Docker containers are based on the host operating system, and Linux and Windows have different container runtimes. However, you can use Linux containers on Linux and Windows containers on Windows. To run a Windows Docker container on Linux, you would need to use virtualization or a compatibility layer like WSL 2 (Windows Subsystem for Linux) to create a Linux environment within which you can run the Linux Docker engine and Linux containers.
Can I run a Windows container on Docker?
- Yes, Docker supports running Windows containers.
- You can run Windows containers on a Windows host using Docker.
- Ensure that your Windows host is running a compatible version of Windows and Docker Engine.
- You can use Docker CLI commands or Docker Compose to manage and run Windows containers.
Can a Docker container run on any OS?
- No, a Docker container cannot run on any OS.
- Docker containers are platform-dependent and require a compatible operating system.
- Containers are based on the host’s operating system kernel.
- Therefore, you can run Docker containers on an OS that is compatible with the container runtime, such as Linux containers on a Linux host and Windows containers on a Windows host.
Read More Posts
- How do I put Docker on my desktop Windows 10 home?
- Best answer: How do I install Dockers on Windows 10?
- Can I run Linux on Docker?
- Are all Docker containers Linux?
- Your question: Which Linux OS is best for Docker?
- Can you run Docker on Linux?
can we run a windows docker container on linux host? also can take a RDP to windows docker container hosted on linux from other windows machines in the same network?
Can you run Windows in a Docker container?
You can run both Linux and Windows programs and executables in Docker containers. The Docker platform runs natively on Linux (on x86-64, ARM and many other CPU architectures) and on Windows (x86-64). Docker Inc. builds products that let you build and run containers on Linux, Windows and macOS.
How do I run a Windows program in a container?
First, open the container host you want to manage, and in the Tools pane, select the Containers extension. Then, select the Images tab inside the Container extension under Container Host. In the Pull Container Image settings, provide the image URL and the tag.
Can Docker run Linux containers?
That’s right. Docker for Windows can run Linux or Windows containers, with support for Linux containers via a Hyper-V Moby Linux VM (as of Docker for Windows 17.10 this VM is based on LinuxKit).
How do I run two Docker containers at the same time?
Docker -> Settings –> Daemon With Docker for Windows started and Windows containers selected, you can now run either Windows or Linux Containers simultaneously. The new –platform=linux command line switch is used to pull or start Linux images on Windows. Now start the Linux container and a Windows Server Core container.
Is it possible to run a Windows container on Linux?
«windows docker»: if that means docker for windows, running Windows container, then no. You could run windows container on Linux the same way you are running Linux Container on windows: through a Virtual Machine emulating the target host. A docker-compose that handles both qemu and preinstalled isos might be possible.
Can I run Docker on a Windows Nano Server?
In same rare cases, you can migrate your code to .NET Core, but still run on Windows Nano server, with an image size of 95 MB. If you are using Docker-for-Windows, you can run now both windows and Linux containers simultaneously: Running Docker Windows and Linux Containers Simultaneously
Today, it is clearly possible.
I recently succeeded in containerizing Windows Guest using QEMU and Docker.
https://github.com/gnh1201/docker-qemu/wiki/Windows-Guest
«windows docker»: if that means docker for windows, running Windows container, then no.
You could run windows container on Linux the same way you are running Linux Container on windows: through a Virtual Machine emulating the target host.
Update Dec. 2016: Kubernetes 1.5 might offer a solution: see «Linux machine with docker deploy windows container»
Is it possible to run Windows Containers on Linux? The scenario is based on an app written in the .NET (old net) and the Linux user that wants to run this with Docker to provide a net462
written API on the localhost
.
I am using beta version from Docker Desktop for Windows
If no, then why can Windows run Linux containers and not vice-versa?
EDIT:
As some time has passed and this question is a popular one. I’d like to add one note here that the workaround is to use the new netstandard. It allowed me to pack 4.6.2
framework into new library.
This question is related to
linux
docker
docker-for-windows
windows-container
docker-desktop
Update3: 06.2019
Some of the comments says that the answer is not clear, I’ll try to clarify.
TL;DR:
Q: Can Windows containers run on Linux?
A: No. They cannot.
Containers are using the underlying Operating System resources and drivers, so Windows containers can run on Windows only, and Linux containers can run on Linux only.
Q: But what about Docker for Windows? Or other VM-based solutions?
A: Docker for Windows allows you to simulate running Linux containers on Windows, but under the hood a Linux VM is created, so still Linux containers are running on Linux, and Windows containers are running on Windows.
Bonus: Read this very nice article about running Linux docker containers on Windows.
Q: So, what should I do with a .Net Framework 462 app, if I would like to run in a container?
A: It depends. Following several recommendations:
- If it is possible — move to .Net Core. Since .Net Core brings support to most major features of .Net Framework, and .Net Framework 4.8 will be the last version of .Net framework
-
If you cannot migrate to .Net Core — As @Sebastian mentioned — you can convert your libraries to .Net Standard, and have 2 versions of app — one on .Net Framework 4.6.2, and one on .Net Core — it is not always obvious, Visual Studio supports it pretty well (with multi-targeting), but some dependencies can require extra care.
-
(Less recommended) In some cases, you can run windows containers. Windows containers are becoming more and more mature, with better support in platforms like Kubernetes. But to be able to run .Net Framework code, you still need to run on base image of «Server Core», which occupies about 1.4 GB. In same rare cases, you can migrate your code to .Net Core, but still run on Windows Nano servers, with an image size of 95 MB.
Leaving also the old updates for history
Update2: 08.2018
If you are using Docker-for-Windows, you can run now both windows and linux containers simultaneously: https://blogs.msdn.microsoft.com/premier_developer/2018/04/20/running-docker-windows-and-linux-containers-simultaneously/
Bonus: Not directly related to the question, but you can now run not only the linux container itself, but also orchestrator like kubernetes: https://blog.docker.com/2018/07/kubernetes-is-now-available-in-docker-desktop-stable-channel/
Updated at 2018:
Original answer in general is right, BUT several months ago, docker added experimental feature LCOW (official github repository).
From this post:
Doesn’t Docker for Windows already run Linux containers? That’s right.
Docker for Windows can run Linux or Windows containers, with support
for Linux containers via a Hyper-V Moby Linux VM (as of Docker for
Windows 17.10 this VM is based on LinuxKit).The setup for running Linux containers with LCOW is a lot simpler than
the previous architecture where a Hyper-V Linux VM runs a Linux Docker
daemon, along with all your containers. With LCOW, the Docker daemon
runs as a Windows process (same as when running Docker Windows
containers), and every time you start a Linux container Docker
launches a minimal Hyper-V hypervisor running a VM with a Linux
kernel, runc and the container processes running on top.Because there’s only one Docker daemon, and because that daemon now
runs on Windows, it will soon be possible to run Windows and Linux
Docker containers side-by-side, in the same networking namespace. This
will unlock a lot of exciting development and production scenarios for
Docker users on Windows.
Original:
As mentioned in comments by @PanagiotisKanavos, containers are not for virtualization, and they are using the resources of the host machine. As a result, for now windows container cannot run «as-is» on linux machine.
But — you can do it by using VM — as it works on windows. You can install windows VM on your linux host, which will allow to run windows containers.
With it, IMHO run it this way on PROD environment will not be the best idea.
Also, this answer provides more details.
No, you cannot run windows containers directly on Linux.
But you can run Linux on Windows.
Windows Server/10 comes packaged with base image of ubuntu OS (after september 2016 beta service pack). That is the reason you can run linux on windows and not other wise. Check out here. https://thenewstack.io/finally-linux-containers-really-will-run-windows-linuxkit/
You can change between OS containers Linux and windows by right clicking on the docker in tray menu.
Containers use the OS kernel. Windows Container utilize processes in order to run. So theoretically speaking Windows Containers cannot run on Linux.
However there are workarounds utilizing VMstyle solutions.
I Have found this solution which uses Vagrant and Packer on Mac, so it should work for Linux as well:
https://github.com/StefanScherer/windows-docker-machine
This Vagrant environment creates a Docker Machine to work on your
MacBook with Windows containers. You can easily switch between Docker
for Mac Linux containers and the Windows containers.
building the headless Vagrant box
$ git clone https://github.com/StefanScherer/packer-windows $ cd packer-windows $ packer build --only=vmware-iso windows_2019_docker.json $ vagrant box add windows_2019_docker windows_2019_docker_vmware.box
Create the Docker Machine
$ git clone https://github.com/StefanScherer/windows-docker-machine $ cd windows-docker-machine $ vagrant up --provider vmware_fusion 2019
Switch to Windows containers
$ eval $(docker-machine env 2019)
While Docker for Windows is perfectly able to run Linux containers, the converse, while theoretically possible, is not implemented due to practical reasons.
The most obvious one is, while Docker for Windows can run a Linux VM freely, Docker for Linux would require a Windows license in order to run it inside a VM.
Also, Linux is completely customizable, so the Linux VM used by Docker for Windows has been stripped down to just a few MB, containing only the bare minimum needed to run the containers, while the smallest Windows distribution available is about 1.5 GB. It may not be an impracticable size, but it is much more cumbersome than the Linux on Windows counterpart.
While it is certainly possible for someone to sell a Docker for Linux variation bundled with a Windows license and ready to run Windows containers under Linux (and I don’t know if such product exists), the bottom line is that you can’t avoid paying Windows vendor lock-in price: both in money and storage space.
Solution 1 — Using VirtualBox
As Muhammad Sahputra suggested in this post, it is possible to run Windows OS inside VirtualBox (using VBoxHeadless — without graphical interface) inside Docker container.
Also, a NAT setup inside the VM network configurations can do a port forwarding which gives you the ability to pass-through any traffic that comes to and from the Docker container. This eventually, in a wide perspective, allows you to run any Windows-based service on top of Linux machine.
Maybe this is not a typical use-case of a Docker container, but it definitely an interesting approach to the problem.
Solution 2 — Using Wine
For simple applications and maybe more complicated, you can try to use wine inside a docker container.
This docker hub page may help you to achieve your goal.
I hope that Docker will release a native solution soon, like they did with docker-machine on Windows several years ago.
Unlike Virtualization, containerization uses the same host os. So the container built on linux can not be run on windows and vice versa.
In windows, you have to take help of virtuallization (using Hyper-v) to have same os as your containers’s os and then you should be able to run the same.
Docker for windows is similar app which is built on Hyper-v and helps in running linux docker container on windows.
But as far as I know, there is nothing as such which helps run windows containers on linux.
You can use Windows Containers inside a virtual machine (the guest OS should match the requirements — Windows 10 Pro or Windows 2016).
For example you can use VirtualBox, just enable Hyper-V inside System / Acceleration / Paravirtualization Interface.
After that if Docker doesn’t start up because of an error, use the «Switch to Windows containers…» in the settings.
(this could be moved as a comment to the accepted answer, but I don’t have enough reputation to do so)
Windows containers are not running on Linux and also You can’t run Linux containers on Windows directly.
We can run Linux containers on Windows. Docker for Windows uses Hyper-v based Linux-Kit or WSL2 as backend to facilitate Linux containers.
If any Linux distribution having this kind of setup, we can run Windows containers. Docker for Linux supports only Linux containers.