Docker Image,其中包括用于在Linux和MacOS上运行Windows应用程序的Winetricks
Docker-Wine容器可以使用X11转发或作为RDP服务器运行,以适合您的用例。默认值是使用X11转发,该X11转发利用计算机的X服务器直接渲染到当前会话中,并通过PulseAudio(仅在Linux上的音频重定向)播放声音。
将Docker-Wine与RDP服务器一起使用,可以在无头机器或可能无法运行X服务器的机器上运行容器。然后,您可以使用远程桌面客户端连接到可能位于本地或远程计算机上的容器。如果您需要MacOS上的声音,这是当前唯一的解决方案。
使用docker-wine脚本是最简单的入门方法,应该是Linux和MacOS所需的全部。
docker-wine脚本在Linux上:
wget https://raw.githubusercontent.com/scottyhardy/docker-wine/master/docker-wine
chmod +x docker-wine在MacOS上:
curl -O https://raw.githubusercontent.com/scottyhardy/docker-wine/master/docker-wine
chmod +x docker-winedocker-wine在没有其他参数的情况下运行脚本将启动交互式bash会话:
./docker-wine您可以通过添加wine , winetricks , winecfg或任何其他有效参数的有效命令来覆盖默认的交互式bash会话:
./docker-wine wine notepaddocker-wine启动框架缓冲区显示默认为:xvfb:95 -screen 0 320x200x8导出显示到服务器号码:95
./docker-wine --xvfb./docker-wine --xvfb=:95,0,320x200x8docker-wine与诺蒂./docker-wine --nottydocker-wine使用--rdp选项运行,使用交互式bash会话启动RDP服务器:
./docker-wine --rdp或者,您可以将容器作为在后台运行的独立守护程序运行。开始守护程序:
./docker-wine --rdp=start然后停止守护程序:
./docker-wine --rdp=stop所有Windows桌面和服务器都带有远程桌面连接客户端的预安装,MacOS用户可以免费从App Store下载Microsoft Remote Desktop应用程序。对于Linux用户,我建议使用Remmina远程桌面客户端。
对于主机名,请使用localhost如果容器位于同一机器上,则在您正在运行的远程桌面客户端的同一机器上,对于远程连接,只需使用您要连接的机器的名称或IP地址即可。注意:要连接到远程计算机,它将需要通过防火墙暴露于TCP端口3389。
要登录,请使用以下默认用户帐户详细信息:
Username: wineuser
Password: wineuserdocker-wine时的其他选项以根开始启动容器:
./docker-wine --as-root或使用相同的用户名,UID,GID和家庭路径启动容器(在绑定到本地文件系统时尤其有用):
./docker-wine --as-me您可以组合选项:
./docker-wine --as-root --rdp您还可以使用标准Docker语法来添加尽可能多的其他环境变量,设备和卷:
./docker-wine --env= " MY_ENV_VAR=some_value " --device=/dev/snd --volume= " myvol:/some/path:ro " --volume= " /usr/data:data "有关选项的完整列表,请参见docker-wine帮助:
./docker-wine --help默认密码是wineuser ,如果您使用--as-me参数,则默认情况下会更改为您自己的用户名。您可以使用--password="your_password"覆盖默认密码,但是即使将其传递给容器之前,该密码已加密,您的密码仍然出现在纯文本中,用于连接到同一主机计算机的任何其他用户。根据您的用例,这可能是一个问题。
一种解决方案是使用--password-prompt ,并在实例化docker-wine容器时提示输入用户密码。这将阻止您的密码出现在计算机的过程列表中,但确实需要每次手动输入密码。
如果提示是不可取的,那么解决方案是使用openssl在将密码传递给docker-wine脚本之前加密密码。此命令将使用随机盐产生密码的MD5加密哈希,这意味着每次运行都会产生不同的哈希:
openssl passwd -1 -salt $( openssl rand -base64 6 ) " your_password "
使用此安全字符串的一种方法是将其存储到磁盘上:
echo $( openssl passwd -1 -salt $( openssl rand -base64 6 ) " your_password " ) > ~ /.docker-wine然后,当使用docker-wine脚本时,只需cat文件:
./docker-wine --rdp --as-me --secure-password= " $( cat ~ /.docker-wine ) " 首先,从Github克隆存储库:
git clone https://github.com/scottyhardy/docker-wine.git
cd docker-wine要构建容器,只需运行:
./build要运行本地构建的容器,请与--local开关一起使用docker-wine :
./docker-wine --local wine notepad当使用Docker-wine脚本实例化docker-wine容器时,创建了一个名为winehome的卷容器,并将其映射到容器内的用户房屋中。使用音量容器可以在执行每个执行后可以安全地删除Docker-Wine容器,因为只要不删除winehome卷,用户数据就会持续使用。这有效地允许随时将docker-wine图像换成更新版本。
您可以通过运行来手动创建winehome卷容器:
docker volume create winehome如果您不想要卷容器,则可以使用以下方式删除它:
docker volume rm winehome如果您打算将scottyhardy/docker-wine用作另一个Docker映像的基础,则应设置相同的ENTRYPOINT以启用X11转发和RDP服务器模式继续操作:
FROM scottyhardy/docker-wine:latest
... <your code here>
ENTRYPOINT [ "/usr/bin/entrypoint" ]docker run命令手动运行在Linux上工作的PulseAudio重定向和X11重定向有许多先决条件,以便在MacOS上工作。我计划在不久的将来将其记录在Wiki中,但这应该足以让您开始。
首先,从Dockerhub获取最新图像:
docker pull scottyhardy/docker-wine这是Linux上X11重定向的基本docker run命令,将启动交互式bash会话:
docker run -it
--rm
--hostname= " $( hostname ) "
--env= " DISPLAY "
--volume= " ${XAUTHORITY :- ${HOME} / .Xauthority} :/root/.Xauthority:ro "
--volume= " /tmp/.X11-unix:/tmp/.X11-unix:ro "
scottyhardy/docker-wine /bin/bash这是一个基本的docker run命令,用于使用交互式Bash会话在MacOS和Linux上启动RDP服务器:
docker run -it
--rm
--hostname= " $( hostname ) "
--env= " RDP_SERVER=yes "
--publish= " 3389:3389/tcp "
scottyhardy/docker-wine /bin/bash要测试视频,请尝试打开记事本:
./docker-wine wine notepad要测试声音,请尝试使用pacat :
./docker-wine pacat -vv /dev/urandom