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