Imagen de Docker que incluye Wine y Winetricks para ejecutar aplicaciones de Windows en Linux y MacOS
El contenedor Docker-Wine se puede ejecutar con el reenvío X11 o como un servidor RDP para adaptarse a su caso de uso. El valor predeterminado es usar el reenvío X11 que utiliza el servidor X de su máquina para renderizar gráficos directamente en su sesión actual y reproducir sonidos a través de PulseAudio (redirección de audio solo en Linux).
El uso de Docker-Wine con un servidor RDP permite que el contenedor se ejecute en una máquina sin cabeza o una máquina que puede no ejecutar un servidor X. Luego puede usar un cliente de escritorio remoto para conectarse al contenedor que puede ubicarse en su máquina local o remota. Esta es actualmente la única solución si necesita sonido en macOS.
Usar el script docker-wine es la forma más fácil de comenzar y debería ser todo lo que necesita para Linux y MacOS.
docker-wineEn Linux:
wget https://raw.githubusercontent.com/scottyhardy/docker-wine/master/docker-wine
chmod +x docker-wineEn macOS:
curl -O https://raw.githubusercontent.com/scottyhardy/docker-wine/master/docker-wine
chmod +x docker-winedocker-wine con el reenvío X11Ejecutar el script sin otros argumentos comenzará una sesión de Bash interactiva:
./docker-wine Puede anular la sesión de BASH interactiva predeterminada agregando wine , winetricks , winecfg o cualquier otro comando válido con sus argumentos asociados:
./docker-wine wine notepaddocker-wine con XVFBIniciar una pantalla de búfer de cuadro predeterminando: xvfb: 95 -pantalla 0 320x200x8 Exportación de exportación al número de servidor: 95
./docker-wine --xvfb./docker-wine --xvfb=:95,0,320x200x8docker-wine adjunto con Notty ./docker-wine --nottydocker-wine con RDP Server Ejecute con la opción --rdp para iniciar el servidor RDP con una sesión de bash interactiva:
./docker-wine --rdpO bien, puede ejecutar el contenedor como un demonio separado que se ejecuta en el fondo. Para comenzar el demonio:
./docker-wine --rdp=startLuego para detener el demonio:
./docker-wine --rdp=stopTodos los escritorios y servidores de Windows vienen con el cliente de conexión de escritorio remoto preinstalados y los usuarios de MacOS pueden descargar la aplicación de escritorio remoto de Microsoft de forma gratuita desde la App Store. Para los usuarios de Linux, sugeriría usar el cliente de escritorio remoto Remmina.
Para el nombre de host, use localhost si el contenedor está alojado en la misma máquina en la que está ejecutando su cliente de escritorio remoto y para conexiones remotas, solo use el nombre o la dirección IP de la máquina a la que se está conectando. Nota: Para conectarse a una máquina remota, requerirá que el puerto TCP 3389 se expuse a través del firewall.
Para iniciar sesión, use los siguientes detalles predeterminados de la cuenta de usuario:
Username: wineuser
Password: wineuserdocker-wineInicie el contenedor como raíz:
./docker-wine --as-rootO comience el contenedor como usted mismo con el mismo nombre de usuario, UID, GID y ruta de inicio (especialmente útil cuando se vincula al sistema de archivos local):
./docker-wine --as-mePuedes combinar opciones:
./docker-wine --as-root --rdpTambién puede usar la sintaxis de Docker estándar para agregar tantas variables de entorno adicionales, dispositivos y volúmenes que necesite:
./docker-wine --env= " MY_ENV_VAR=some_value " --device=/dev/snd --volume= " myvol:/some/path:ro " --volume= " /usr/data:data " Vea la ayuda docker-wine para una lista completa de opciones:
./docker-wine --help La contraseña predeterminada es wineuser y cambiará a su propio nombre de usuario de forma predeterminada si usa el argumento --as-me . Puede anular la contraseña predeterminada utilizando --password="your_password" , pero aunque esta contraseña está encriptada antes de pasarla al contenedor, su contraseña aún aparece en texto sin formato en la lista de procesos para cualquier otro usuario conectado a la misma máquina de host. Dependiendo de su caso de uso, esto podría ser un problema.
Una solución es usar --password-prompt y se le pedirá que ingrese la contraseña del usuario cuando instanciará el contenedor Docker-wine. Esto evitará que su contraseña aparezca en la lista de procesos de su máquina, pero requiere ingresar manualmente la contraseña cada vez.
Si la solicitud es indeseable, la solución es cifrar su contraseña antes de pasarla al script docker-wine , usando openssl . Este comando producirá un hash cifrado MD5 de su contraseña con una sal aleatoria, lo que significa que cada ejecución producirá un hash diferente:
openssl passwd -1 -salt $( openssl rand -base64 6 ) " your_password "
Un método para usar esta cadena segura sería almacenarlo en el disco:
echo $( openssl passwd -1 -salt $( openssl rand -base64 6 ) " your_password " ) > ~ /.docker-wine Luego, simplemente cat el archivo cuando use el script docker-wine :
./docker-wine --rdp --as-me --secure-password= " $( cat ~ /.docker-wine ) " Primero, clone el repositorio de GitHub:
git clone https://github.com/scottyhardy/docker-wine.git
cd docker-winePara construir el contenedor, simplemente ejecute:
./build Para ejecutar su contenedor construido localmente, use docker-wine con el interruptor --local :
./docker-wine --local wine notepad Cuando el contenedor Docker-Wine se instancia con el script docker-wine , se crea un contenedor de volumen llamado winehome y se asigna a la casa del usuario dentro del contenedor. El uso de un contenedor de volumen permite que el contenedor Docker-Wine se elimine de manera segura después de cada ejecución, ya que los datos del usuario persistirán siempre que no se elimine el volumen winehome . Esto efectivamente permite que la imagen docker-wine se cambie por una versión más nueva en cualquier momento.
Puede crear manualmente el contenedor de volumen winehome ejecutando:
docker volume create winehomeSi no desea el contenedor de volumen, puede eliminarlo usando:
docker volume rm winehome Si planea usar scottyhardy/docker-wine como base para otra imagen de Docker, debe configurar el mismo ENTRYPOINT para habilitar los modos de reenvío X11 y servidor RDP para continuar operando:
FROM scottyhardy/docker-wine:latest
... <your code here>
ENTRYPOINT [ "/usr/bin/entrypoint" ]docker runHay una serie de requisitos previos para que PulseAudio Redirection funcione en Linux y para que la redirección X11 funcione en macOS. Planeo documentarlos en un wiki en el futuro cercano, pero esto debería ser suficiente para comenzar.
Primero, extraiga la última imagen de Dockerhub:
docker pull scottyhardy/docker-wine Aquí hay un comando básico docker run para la redirección X11 en Linux que iniciará una sesión de bash interactiva:
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 Aquí hay un comando básico docker run para iniciar el servidor RDP tanto en MacOS como en Linux con una sesión de bash interactiva:
docker run -it
--rm
--hostname= " $( hostname ) "
--env= " RDP_SERVER=yes "
--publish= " 3389:3389/tcp "
scottyhardy/docker-wine /bin/bashPara probar el video, intente abrir el bloc de notas:
./docker-wine wine notepad Para probar el sonido, intente usar pacat :
./docker-wine pacat -vv /dev/urandom