
scottyhardy/docker-wine。
使用docker-wine脚本是最简单的入门方式,适用于Linux和macOS系统。
在Linux上:
bashwget [***] chmod +x docker-wine
在macOS上:
bashcurl -O [***] chmod +x docker-wine
不带任何参数运行脚本将启动交互式bash会话:
bash./docker-wine
可通过添加wine、winetricks、winecfg或其他有效命令及参数覆盖默认的交互式bash会话:
bash./docker-wine wine notepad
!记事本截图
启动帧缓冲显示,默认配置为: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
!登录提示截图
!XFCE桌面截图
以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 [***] 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故障排除步骤见[***]
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务