https://hub.docker.com/r/dockurr/windows
https://hub.docker.com/r/microsoft/windows-server/
打开上面链接,先读一遍内容,再去拉取镜像 :docker pull dockurr/windows
接着,在 Linux 系统中加载 KVM 模块
- 检查当前 KVM 支持
|-------------------|
| lsmod | grep kvm |
如果看到 kvm_intel 或 kvm_amd 表示已加载(根据 CPU 类型显示)
若无输出则表示未加载
- 如果是虚拟机里面的linux,还有执行以下处理,如果不是,则需要检查系统本身 BIOS 虚拟化设置
a)检查虚拟机设置



vmx.allowNested = "TRUE" # 在 .vmx 配置文件中手动添加
b)检查系统本身

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| sudo modprobe kvm # 加载基础 KVM 模块 sudo modprobe kvm_intel # Intel CPU 专用模块 # 或 sudo modprobe kvm_amd # AMD CPU 专用模块 #设置开机自动加载 # 创建模块配置文件 echo "kvm" | sudo tee /etc/modules-load.d/kvm.conf echo "kvm_intel" | sudo tee -a /etc/modules-load.d/kvm.conf # Intel # 或 echo "kvm_amd" | sudo tee -a /etc/modules-load.d/kvm.conf # AMD # 重新生成 initramfs(仅某些发行版需要) sudo update-initramfs -u |
- 验证嵌套虚拟化是否生效(可能仅适合虚拟机)
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| # 检查 CPU 虚拟化支持标志(应看到 vmx 或 svm) grep -E '(vmx|svm)' /proc/cpuinfo # 检查 KVM 模块是否加载(应显示 kvm_intel/kvm_amd 和 kvm) lsmod | grep kvm # 验证 /dev/kvm 设备存在 ls -l /dev/kvm |
- 安装kvm的相关依赖
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| # Ubuntu/Debian 系统 sudo apt update sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients virt-manager docker.io docker-compose # CentOS/RHEL 系统 sudo yum install -y qemu-kvm libvirt virt-manager docker docker-compose sudo systemctl enable --now libvirtd docker |
- 配置用户权限
|--------------------------------------------------------------------------------------|
| # 将当前用户加入 kvm 和 docker 组 sudo usermod -aG kvm,docker $USER newgrp kvm # 刷新组权限(或重新登录) |
- 启动 Docker Windows 容器
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| #创建/home/docker-windows/storage 用于映射主机与容器的目录 mkdir -p /home/docker-windows/storage 创建docker-compose.yml 文件 下面三选一,建议选第三种 |-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | services: windows: # 定义名为 windows 的服务 image: dockurr/windows # 使用 dockurrr/windows 镜像(专用于运行 Windows 的 Docker 镜像) container_name: windows # 指定容器名称 environment: VERSION: "11" # 指定要运行的 Windows 版本(11 表示 Windows 11) RAM_SIZE: "8G" # 分配内存(默认 4G) # 分配 CPU 核心数 devices: - /dev/kvm # 挂载 KVM 虚拟化设备(必需硬件加速) - /dev/net/tun # 挂载 TUN/TAP 设备(用于虚拟网络) cap_add: - NET_ADMIN # 授予容器网络管理权限 ports: - 8006:8006 # 映射 Web 控制台端口(用于访问 Windows 界面) - 3389:3389/tcp # 映射 RDP 远程桌面协议端口(TCP) - 3389:3389/udp # 映射 RDP 远程桌面协议端口(UDP) volumes: - /home/docker-windows/storage:/storage # 将/home/docker-windows/storage 目录文件夹挂载到容器 /storage 路径(持久化存储) restart: always # 容器退出时自动重启 stop_grace_period: 2m # 容器停止前等待 2 分钟(确保正常关闭) | | #如果上面的配置导致启动起来时没有下载剩余的依赖,就用默认的配置 services: windows: image: dockurr/windows container_name: windows environment: VERSION: "11" devices: - /dev/kvm - /dev/net/tun cap_add: - NET_ADMIN ports: - 8006:8006 - 3389:3389/tcp - 3389:3389/udp volumes: - ./windows:/storage restart: always stop_grace_period: 2m | | #亦或者(建议这种) docker run -it \ --name windows \ -p 8006:8006 \ -p 3389:3389/tcp \ -p 3389:3389/udp \ --device /dev/kvm \ --device /dev/net/tun \ --cap-add NET_ADMIN \ -v /home/docker-windows/storage:/storage \ --restart always \ --stop-timeout 120 \ -e VERSION="11" \ -e DISK_SIZE="256G" \ -e LANGUAGE="CN" \ -e RAM_SIZE="8G"\ -e CPU_CORES="4"\ dockurr/windows | |
| 授权当前用户用户组配置 sudo usermod -aG docker,kvm $USER newgrp docker # 立即生效组权限变更 # 启动容器(后台运行) docker-compose up -d |
建议使用第三种docker run -it.. 的方式(前面两种会报一些莫名其妙的问题,最好多快照一下,说不准遇到某些地方做错了要重来)

等待下载

在shell 的主机上打开这个地址,我的主机安装了vmware linux(192.168.4.9),所以使用这个的地址打开window的安装界面,进一步等待下载,完成后如图,便可完成,如果没有配置端口放开8006的,看下面第8点配置防火墙


至此,会导致之前linux里安装的东西,如数据库链接不上,似乎被劫持了(看第9点)
- 进入容器
|--------------------------------------------------------------------------------------------------------------|
| docker exec -it windows /bin/bash
|
外面ping一下

容器内访问外部

- 配置防火墙
|--------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| # 永久开放 8006/TCP 端口 sudo firewall-cmd --permanent --add-port=8006/tcp # 重新加载防火墙配置 sudo firewall-cmd --reload # 验证端口是否开放 sudo firewall-cmd --list-ports | grep 8006 |
- 因为前面出现网络问题,调整网络,以192.168.4网段为例(因为我最外面的是windows,我想通过最外面的windows访问里面容器windows,但生产环境应该不用配的,并且以下会导致宿主机linux无法与docker的windows互连)
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| #虚拟机linux 创建vlan docker network create -d macvlan \ --subnet=192.168.4.0/24 \ --gateway=192.168.4.1 \ -o parent=ens33 vlan
# 修改docker-compose.yml配置 |--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | services: windows: image: dockurr/windows container_name: windows environment: VERSION: "11" devices: - /dev/kvm - /dev/net/tun cap_add: - NET_ADMIN ports: - 8006:8006 - 3389:3389/tcp - 3389:3389/udp volumes: - /home/docker-windows/storage:/storage networks: vlan: ipv4_address: 192.168.4.100 # 指定容器 IP 地址 networks: vlan: external: true | |
进入docker windows容器

最外面的windows 访问虚拟机里面的linux 的docker容器windows地址192.168.4.100

linux 开放 windows端口
|-----------------------------------------------------------------------------------------------------------------------------------------------------|
| # 永久开放端口 sudo firewall-cmd --permanent --add-port=3389/tcp sudo firewall-cmd --permanent --add-port=3389/udp # 重新加载防火墙配置 sudo firewall-cmd --reload |
但这样会有个问题docker的windows无法与linux 互连

链接:https://blog.oddbit.com/post/2018-03-12-using-docker-macvlan-networks/#host-access
解决办法:
停止容器,删除之前的配的vlan
docker network rm vlan

接着重新配置
步骤 1:创建带有 --aux-address 的 macvlan 网络
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| docker network create -d macvlan \ --subnet=192.168.4.0/24 \ --gateway=192.168.4.1 \ -o parent=ens33 \ --aux-address 'host=192.168.4.200' \ my_macvlan_network 解释: --subnet 和 --gateway:指定子网和网关。 -o parent=ens33:指定父接口(此处为 ens33)。 --aux-address 'host=192.168.4.200':为宿主机预留一个 IP 地址(192.168.4.200),防止 Docker 分配给容器。 |
验证网络配置
docker network inspect my_macvlan_network
步骤2:在宿主机上创建新的 macvlan 接口
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| #链接到父接口 ens33 并使用桥接模式。 sudo ip link add mynet-shim link ens33 type macvlan mode bridge #配置接口 IP 地址并启 sudo ip addr add 192.168.4.200/32 dev mynet-shim sudo ip link set mynet-shim up 解释: ip addr add:为 mynet-shim 接口分配预留的 IP 地址 192.168.4.200。 ip link set:启动该接口。 #验证接口状态 ip addr show mynet-shim #添加路由条目 sudo ip route add 192.168.4.0/24 dev mynet-shim #验证 ip route show | grep mynet-shim
|
注意:因为改名了vlan->my_macvlan_network
所以docker-compose.yml 也要改一下

保存运行windows docker
docker-compose up --force-recreate -d
验证网络,可以看到整个网络互通了。


10 . 远程一下容器内的windows
可以用安装向日葵的方式,也可以采用windows的自带远程
至此结束
题外话: 以上方式最终是没用到生产环境上,用台主机安装windows 简直不要太方便。。。
以上内容仅供参考,如果过程中遇到问题,问我也没用,因为我也看不太懂了,这大概就是做开发经常遇到的无语情况吧。