
https://github.com/scottyhardy/docker-wine/actions/workflows/build.yml/badge.svg](https://github.com/scottyhardy/docker-wine/actions/workflows/build.yml)
包含Wine和Winetricks的Docker镜像,用于在Linux和macOS上运行Windows应用程序
docker-wine容器可通过X11转发或RDP服务器模式运行,以适应不同使用场景。默认使用X11转发,利用本地机器的X服务器将图形直接渲染到当前会话,并通过pulseaudio播放声音。
使用RDP服务器模式时,容器可在无头机器或未运行X服务器的机器上运行,然后通过远程桌面客户端连接到容器(无论容器位于本地还是远程机器)。
使用docker-wine脚本是最简单的入门方式,适用于Linux和macOS系统。
在Linux上:
bashwget https://raw.githubusercontent.com/scottyhardy/docker-wine/master/docker-wine chmod +x docker-wine
在macOS上:
bashcurl -O https://raw.githubusercontent.com/scottyhardy/docker-wine/master/docker-wine chmod +x docker-wine
不带任何参数运行脚本将启动交互式bash会话:
bash./docker-wine
可通过添加wine、winetricks、winecfg或其他有效命令及参数覆盖默认的交互式bash会话:
bash./docker-wine wine notepad
!https://raw.githubusercontent.com/scottyhardy/docker-wine/master/images/screenshot_1.png
启动帧缓冲显示,默认配置为:Xvfb :95 -screen 0 320x200x8,将DISPLAY导出到服务器编号:95
bash./docker-wine --xvfb
bash./docker-wine --xvfb=:95,0,320x200x8
bash./docker-wine --notty
使用--rdp选项启动RDP服务器并进入交互式bash会话:
bash./docker-wine --rdp
或作为后台运行的分离守护进程启动。启动守护进程:
bash./docker-wine --rdp=start
停止守护进程:
bash./docker-wine --rdp=stop
所有Windows桌面和服务器均预装远程桌面连接客户端,macOS用户可从App Store免费下载Microsoft Remote Desktop应用,Linux用户建议使用Remmina远程桌面客户端。
主机名方面,若容器与客户端在同一机器,使用localhost;远程连接则使用目标机器的名称或IP地址。注意:远程连接需确保TCP 3389端口通过防火墙开放。
登录时使用默认用户账户信息:
bash用户名: wineuser 密码: wineuser
!https://raw.githubusercontent.com/scottyhardy/docker-wine/master/images/screenshot_2.png
!https://raw.githubusercontent.com/scottyhardy/docker-wine/master/images/screenshot_3.png
以root用户启动容器:
bash./docker-wine --as-root
或以当前用户身份启动(相同用户名、UID、GID和主目录路径,绑定本地文件系统时特别有用):
bash./docker-wine --as-me
可组合选项:
bash./docker-wine --as-root --rdp
也可使用标准Docker语法添加额外环境变量、设备和卷:
bash./docker-wine --env="MY_ENV_VAR=some_value" --device=/dev/snd --volume="myvol:/some/path:ro" --volume="/usr/data:data"
查看完整选项列表:
bash./docker-wine --help
默认密码为wineuser,使用--as-me参数时将默认改为当前用户名。可通过--password="your_password"覆盖默认密码,但即使密码在传递给容器前已加密,仍会以明文形式出现在主机的进程列表中,可能存在安全风险。
解决方案之一是使用--password-prompt,在实例化容器时手动输入密码,避免密码出现在进程列表,但每次都需手动输入。
若不希望手动输入,可使用openssl预先加密密码,生成带随机盐的MD5加密哈希(每次运行生成不同哈希):
bashopenssl passwd -1 -salt $(openssl rand -base64 6) "your_password"
一种安全使用方式是将加密字符串保存到文件:
bashecho $(openssl passwd -1 -salt $(openssl rand -base64 6) "your_password") > ~/.docker-wine
运行时读取该文件:
bash./docker-wine --rdp --as-me --secure-password="$(cat ~/.docker-wine)"
首先从GitHub克隆仓库:
bashgit clone https://github.com/scottyhardy/docker-wine.git cd docker-wine
构建容器:
bash./build
使用--local开关运行本地构建的容器:
bash./docker-wine --local wine notepad
通过docker-wine脚本实例化容器时,会创建名为winehome的卷容器,映射到容器内的用户主目录。卷容器使容器可在每次执行后安全删除,用户数据通过winehome卷持久化,便于随时更新docker-wine镜像。
可手动创建winehome卷容器:
bashdocker volume create winehome
若不需要卷容器,可删除:
bashdocker volume rm winehome
若计划将scottyhardy/docker-wine作为其他镜像的基础,需设置相同的ENTRYPOINT以保持X11转发和RDP服务器模式功能:
dockerfileFROM scottyhardy/docker-wine:latest ... <你的代码> ENTRYPOINT ["/usr/bin/entrypoint"]
在Linux上实现pulseaudio重定向和在macOS上实现X11重定向有多项前提条件,后续将在wiki中详细说明,以下为基础启动命令。
首先从DockerHub拉取最新镜像:
bashdocker pull scottyhardy/docker-wine
Linux上X11重定向的基础docker run命令(启动交互式bash会话):
bashdocker run -it \ --rm \ --hostname="$(hostname)" \ --env="DISPLAY" \ --platform="linux/amd64" \ --volume="${XAUTHORITY:-${HOME}/.Xauthority}:/root/.Xauthority:ro" \ --volume="/tmp/.X11-unix:/tmp/.X11-unix:ro" \ scottyhardy/docker-wine /bin/bash
macOS和Linux上启动RDP服务器的基础docker run命令(交互式bash会话):
bashdocker run -it \ --rm \ --hostname="$(hostname)" \ --env="RDP_SERVER=yes" \ --platform="linux/amd64" \ --publish="3389:3389/tcp" \ scottyhardy/docker-wine /bin/bash
测试视频:打开记事本
bash./docker-wine wine notepad
测试声音:使用pacat
bash./docker-wine pacat -vv /dev/urandom
更多pulseaudio故障排除步骤见https://github.com/OpenVoiceOS/ovos-docker/blob/dev/README_MACOS.md
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务