Code Monkey home page Code Monkey logo

docker-wine's Introduction

docker-wine

build Docker Pulls Docker Stars GitHub forks GitHub stars

Docker image that includes Wine and Winetricks for running Windows applications on Linux and macOS

The docker-wine container can either be run with X11 forwarding or as an RDP server to suit your use case. The default is to use X11 forwarding which utilizes your machine's X server to render graphics directly into your current session and play sounds through pulseaudio (audio redirection on Linux only).

Using docker-wine with an RDP server allows the container to be run on a headless machine or a machine that may not be running an X server. You can then use a Remote Desktop client to connect to the container which may be located either on your local or a remote machine. This is currently the only solution if you require sound on macOS.


Getting Started

Using the docker-wine script is the easiest way to get started and should be all you need for Linux and macOS.

Download the docker-wine script

On Linux:

wget https://raw.githubusercontent.com/scottyhardy/docker-wine/master/docker-wine
chmod +x docker-wine

On macOS:

curl -O https://raw.githubusercontent.com/scottyhardy/docker-wine/master/docker-wine
chmod +x docker-wine

Run docker-wine with X11 forwarding

Running the script with no other arguments will start an interactive bash session:

./docker-wine

You can override the default interactive bash session by adding wine, winetricks, winecfg or any other valid commands with their associated arguments:

./docker-wine wine notepad

Screenshot of Notepad

Run docker-wine with Xvfb

Starts up a frame buffer display defaulting to: Xvfb :95 -screen 0 320x200x8 Exports DISPLAY to the server number :95

./docker-wine --xvfb

Customizable options

./docker-wine --xvfb=:95,0,320x200x8

Run docker-wine attached with notty

./docker-wine --notty

Run docker-wine with RDP server

Run with the --rdp option to start the RDP server with an interactive bash session:

./docker-wine --rdp

Or, you can run the container as a detached daemon that runs in the background. To start the daemon:

./docker-wine --rdp=start

Then to stop the daemon:

./docker-wine --rdp=stop

Connecting with an RDP client

All Windows desktops and servers come with the Remote Desktop Connection client pre-installed and macOS users can download the Microsoft Remote Desktop application for free from the App Store. For Linux users, I'd suggest using the Remmina Remote Desktop client.

For the hostname, use localhost if the container is hosted on the same machine you're running your Remote Desktop client on and for remote connections just use the name or IP address of the machine you are connecting to. NOTE: To connect to a remote machine, it will require TCP port 3389 to be exposed through the firewall.

To log in, use the following default user account details:

Username: wineuser
Password: wineuser

Screenshot of login prompt

Screenshot of XFCE desktop

Additional options when running docker-wine

Start the container as root:

./docker-wine --as-root

Or start the container as yourself with the same username, UID, GID and home path (especially useful when binding to local file system):

./docker-wine --as-me

You can combine options:

./docker-wine --as-root --rdp

You can also use standard docker syntax to add as many additional environment variables, devices and volumes as you need:

./docker-wine --env="MY_ENV_VAR=some_value" --device=/dev/snd --volume="myvol:/some/path:ro" --volume="/usr/data:data"

See the docker-wine help for a full list of options:

./docker-wine --help

Securing your password

The default password is wineuser and it will change to your own username by default if you use the --as-me argument. You can override the default password by using --password="your_password" but even though this password is encrypted before passing it to the container, your password still appears in plain text in the process list for any other user connected to the same host machine. Depending on your use case, this could be a problem.

One solution is to use --password-prompt and be prompted to enter the user password when you instantiate the docker-wine container. This will prevent your password from appearing in your machine's process list, but does require manually entering the password each time.

If prompting is undesirable, the solution is to encrypt your password before passing it to the docker-wine script, using openssl. This command will produce an MD5 encrypted hash of your password with a random salt which means each run will produce a different hash:

openssl passwd -1 -salt $(openssl rand -base64 6) "your_password"

One method of using this secure string would be to store it to disk:

echo $(openssl passwd -1 -salt $(openssl rand -base64 6) "your_password") > ~/.docker-wine

Then simply cat the file when using the docker-wine script:

./docker-wine --rdp --as-me --secure-password="$(cat ~/.docker-wine)"

Build and run locally on your own computer

First, clone the repository from GitHub:

git clone https://github.com/scottyhardy/docker-wine.git
cd docker-wine

To build the container, simply run:

./build

To run the your locally built container, use docker-wine with the --local switch:

./docker-wine --local wine notepad

Volume container winehome

When the docker-wine container is instantiated with the docker-wine script, a volume container named winehome is created and is mapped to the user's home within the container. Using a volume container allows the docker-wine container to be safely removed after every execution as user data will persist as long as the winehome volume is not removed. This effectively allows the docker-wine image to be swapped out for a newer version at anytime.

You can manually create the winehome volume container by running:

docker volume create winehome

If you don't want the volume container, you can delete it by using:

docker volume rm winehome

Use docker-wine image in a Dockerfile

If you plan to use scottyhardy/docker-wine as a base for another Docker image, you should set up the same ENTRYPOINT to enable X11 forwarding and RDP server modes to continue operating:

FROM scottyhardy/docker-wine:latest
... <your code here>
ENTRYPOINT ["/usr/bin/entrypoint"]

Manually running with docker run commands

There's a number of prerequisites to getting pulseaudio redirection working on Linux and for X11 redirection to work on macOS. I plan to document these in a wiki in the near future but this should be enough to get you started.

First, pull the latest image from DockerHub:

docker pull scottyhardy/docker-wine

Here is a basic docker run command for X11 redirection on Linux that will start an interactive bash session:

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

Here is a basic docker run command for starting the RDP server on both macOS and Linux with an interactive bash session:

docker run -it \
  --rm \
  --hostname="$(hostname)" \
  --env="RDP_SERVER=yes" \
  --publish="3389:3389/tcp" \
  scottyhardy/docker-wine /bin/bash

Troubleshooting

To test video, try opening Notepad:

./docker-wine wine notepad

To test sound, try using pacat:

./docker-wine pacat -vv /dev/urandom

docker-wine's People

Contributors

636stefan avatar ds17f avatar iuridiniz avatar jdehaan avatar rchildre3 avatar scottyhardy avatar ssb22 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

docker-wine's Issues

How do you run a given .exe file?

Sorry - I'm a bit of a docker noob.

If I have a file on my mac ~/Downloads/run.exe, is there an easy way execute this file using docker-wine?

Support for hardware acceleration

I don't have the hardware to test with, but I think this would be a pretty nifty feature that wouldn't be too difficult to add since all changes are only in the docker run command.

Here's a post from @gluckzhang for some inspiration:

Just for your information, this is my argument list:

	docker run -it \
    --rm \
    --env="DISPLAY" \
    --env="LD_LIBRARY_PATH=/usr/lib32/nvidia-410" \
    --env="WINEARCH=win32" \
    --env="PULSE_SERVER=/tmp/pulse-socket" \
    --volume="${XAUTHORITY:-${HOME}/.Xauthority}:/root/.Xauthority:ro" \
    --volume="/tmp/.X11-unix:/tmp/.X11-unix" \
    --volume="/tmp/pulse-socket:/tmp/pulse-socket" \
    --volume="/usr/lib32/nvidia-410:/usr/lib32/nvidia-410" \
    --volume="/etc/localtime:/etc/localtime:ro" \
    --volume="winehome:/home/wineuser" \
    --device=/dev/nvidiactl \
    --device=/dev/nvidia-uvm \
    --device=/dev/nvidia0 \
    --hostname="$(hostname)" \
    --name="wine" \
    $DOCKER_IMAGE "$@"

If someone is using an Nvidia driver and PulseAudio in Ubuntu 16.04, probably he needs some more arguments to make complex games work. Key tricks:

  • define LD_LIBRARY_PATH env with path to the nvidia driver (otherwise you may fail to support OpenGL, or errors like libGL error: unable to load driver)
  • define PULSE_SERVER env with path to the PulseAudio socket (otherwise wine may fail to detect audio device, and maybe even worse: a "Couldn't initialize DirectSound" error)
  • Add some devices which are needed by the Nvidia driver

I am not sure whether these arguments are essential for other OSes. But when I tried to run WinKawaks in the container, I have to setup everything like the above. Hopefully this will give inspirations when others face similar issues.

Cheers!

Originally posted by @gluckzhang in #44 (comment)

Keeps asking for XQuartz to be installed

Describe the bug
Docker Wine keeps asking for XQuartz to be installed, even if it has already be done.

To Reproduce

➜  curl https://raw.githubusercontent.com/scottyhardy/docker-wine/master/docker-wine -o docker-wine

➜  chmod +x docker-wine

➜  ./docker-wine
XQuartz needs to be installed for X11 forwarding to operate. If necessary, Homebrew will also be installed to perform the installation of XQuartz.
Do you want to continue? [y/N] Y
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 3 taps (homebrew/cask-versions, homebrew/core and homebrew/cask).
==> New Formulae
==> Updated Formulae
==> Deleted Casks
==> Downloading https://dl.bintray.com/xquartz/downloads/XQuartz-2.7.11.dmg
==> Verifying SHA-256 checksum for Cask 'xquartz'.
==> Installing Cask xquartz
==> Running installer for xquartz; your password may be necessary.
==> Package installers may write to any location; options such as --appdir are ignored.
Password:
installer: Package name is XQuartz 2.7.11
installer: Installing at base path /
installer: The install was successful.
🍺  xquartz was successfully installed!

➜  ./docker-wine
XQuartz needs to be installed for X11 forwarding to operate. If necessary, Homebrew will also be installed to perform the installation of XQuartz.
Do you want to continue? [y/N] Y
Updating Homebrew...
Warning: Cask 'xquartz' is already installed.

To re-install xquartz, run:
  brew cask reinstall xquartz

Desktop:

  • OS: macOS Catalina (10.15.4)

Mac OS VNC example

From the README:

There's a few different ways this problem can be solved, but essentially it comes down to using TCP sockets or a remote desktop protocol such as VNC.

How would you achieve working display through VNC on Mac OS?

Sound on macOS

Found some instructions on stack overflow but didn't work using PULSE_SERVER set to local IP and pulse cookie. Jess Frazelle's post says to use /dev/snd which I haven't tried yet.

ERROR: Cannot combine conflicting options --rdp and --nordp

Describe the bug
When running ./docker-wine --rdp I get error ERROR: Cannot combine conflicting options --rdp and --nordp
The problem is that there is no default value for NO_RDP variable

To Reproduce
Steps to reproduce the behavior:

  1. wget https://raw.githubusercontent.com/scottyhardy/docker-wine/master/docker-wine -O docker-wine
  2. chmod +x docker-wine
  3. ./docker-wine --rdp
  4. See error ERROR: Cannot combine conflicting options --rdp and --nordp

Expected behavior
Docker container with RDP enabled should be started.

Screenshots
N/A

Desktop (please complete the following information):

  • OS: Centos 7
  • Browser N/A
  • Version N/A

Smartphone (please complete the following information):

  • Device: N/A
  • OS: N/A
  • Browser N/A
  • Version N/A

Additional context
Need to add NO_RDP="no" in the default values

Local Build fails with apt-get errors

Hi @scottyhardy , First of all, I would like to thank you for this wonderful contribution.

I'm trying to build the image and facing the below error. Could you please help me out here?

Reading package lists...
E: The repository 'https://dl.winehq.org/wine-builds/ubuntu focal Release' does not have a Release file.
The command '/bin/sh -c wget -nv -O- https://dl.winehq.org/wine-builds/winehq.key | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - && apt-add-repository "deb https://dl.winehq.org/wine-builds/ubuntu/ $(grep VERSION_CODENAME= /etc/os-release | cut -d= -f2) main" &amp;&amp; dpkg --add-architecture i386 &amp;&amp; apt-get update &amp;&amp; DEBIAN_FRONTEND="noninteractive" apt-get install -y --install-recommends winehq-${WINE_BRANCH} && rm -rf /var/lib/apt/lists/*' returned a non-zero code: 100
[root@localhost docker-wine-master]#

Complete log is here
build_error.txt

Display errors with wine-devel

Describe the bug
When trying to use the wine-devel branch of wine I am getting error messages regarding display drivers and Vulkan

To Reproduce
Steps to reproduce the behavior:

Clean up any existing winehome

docker volume rm winehome

Attempt to start notepad using wine-devel image:

./docker-wine --tag=wine-devel wine notepad

Output:

wine-devel: Pulling from scottyhardy/docker-wine
Digest: sha256:af2094864bcf5b8c9a0a5ceeb0df1016d03c808725929a4963d9491c46e36532
Status: Image is up to date for scottyhardy/docker-wine:wine-devel
docker.io/scottyhardy/docker-wine:wine-devel
INFO: Creating Docker volume container 'winehome'...
winehome
wine: created the configuration directory '/home/wineuser/.wine'
0024:err:environ:run_wineboot boot event wait timed out
002c:err:winediag:nodrv_CreateWindow Application tried to create a window, but no driver could be loaded.
002c:err:winediag:nodrv_CreateWindow The explorer process failed to start.
0040:err:winediag:nodrv_CreateWindow Application tried to create a window, but no driver could be loaded.
0040:err:winediag:nodrv_CreateWindow The explorer process failed to start.
0024:err:winediag:nodrv_CreateWindow Application tried to create a window, but no driver could be loaded.
0024:err:winediag:nodrv_CreateWindow The explorer process failed to start.

Expected behavior
Should display the notepad as per normal - no issues when using wine-stable

Desktop (please complete the following information):

  • OS: macOS Catalina 10.15.5

No audio from Wine

Describe the bug
When loading ./docker-wine without using the --as-root flag, the audio in wine is not detected. I can run ./docker-wine pacat -vv /dev/urandom without issue so the link between Host and Docker pulse is fine, the issue is that Wine isn't detecting pulseaudio.

To Reproduce
Steps to reproduce the behavior:

  1. ./docker-wine winecfg
  2. Audio Tab

Expected behavior
pulseaudio is detected and shown in winecfg. Clicking Test Sound results in Sound.

Screenshots
Expected:
screenshot

Actual:
screenshot_1

Desktop (please complete the following information):

  • OS: Ubuntu
  • Version: 18.04

Unable to use as basis for Dockerfiles as described in documentation

Describe the bug
Able to run Wine programs using the docker-wine script, but can't make my own Dockerfile to add new programs to run under Wine.

To Reproduce
Using the following test Dockerfile, as given on Docker Hub documentation:
FROM scottyhardy/docker-wine:latest
ENTRYPOINT ["/usr/bin/entrypoint"]
CMD ["wine", "notepad.exe"]

Build image using e.g. docker build -t docker-wine-test .
docker run

See a long list of errors, which seem to indicate that there's no X server running. See below for detailed console log.

Expected behavior
Should see Notepad, as when I run this with docker-wine

Screenshots
Not a screenshot, but the console dump from the failure:

wine-console.txt

Desktop (please complete the following information):

  • OS: Ubuntu Linux 18.04
  • Desktop: GNOME 3.12
  • Browser Chromium
  • Version 76.0.3809.100

Additional context
Able to run programs without a problem on the same machine by using docker-wine, i.e. docker-wine wine notepad.exe

Not running on ubuntu 20.04

Fresh installed ubuntu 20.04

	docker run -it \
		--rm \
		--env="DISPLAY" \
		--volume="${XAUTHORITY:-${HOME}/.Xauthority}:/root/.Xauthority:ro" \
		--volume="/tmp/.X11-unix:/tmp/.X11-unix" \
		--volume="winehome:/home/wineuser" \
		--hostname="$(hostname)" \
		--name="wine" \
		scottyhardy/docker-wine wine notepad

result:

docker run -it \
        --rm \
        --env="DISPLAY" \
        --volume=":/root/.Xauthority:ro" \
        --volume="/tmp/.X11-unix:/tmp/.X11-unix" \
        --volume="winehome:/home/wineuser" \
        --hostname="" \
        --name="wine" \
        scottyhardy/docker-wine wine notepad
No protocol specified
0010:err:ole:marshal_object couldn't get IPSFactory buffer for interface {00000131-0000-0000-c000-000000000046}
0010:err:ole:marshal_object couldn't get IPSFactory buffer for interface {6d5140c1-7436-11ce-8034-00aa006009fa}
0010:err:ole:StdMarshalImpl_MarshalInterface Failed to create ifstub, hres=0x80004002
0010:err:ole:CoMarshalInterface Failed to marshal the interface {6d5140c1-7436-11ce-8034-00aa006009fa}, 80004002
0010:err:ole:get_local_server_stream Failed: 80004002
0009:err:winediag:nodrv_CreateWindow Application tried to create a window, but no driver could be loaded.
0009:err:winediag:nodrv_CreateWindow Make sure that your X server is running and that $DISPLAY is set correctly.
make: *** [Makefile:5: run] Fehler 1

Access to host files from the docker-wine image

Hi,

First of all I want to thank you for this contribution, it is really useful.

I want to ask for guidance on how to properly share data with host. Let's say you want to run notepad (docker-wine wine notepad) and want to save your notes in a host directories rather than in the volume, which is not accessible from the host. This can be useful for other types of programs in order to manipulate user files. Typically what I would do with other Docker images is to mount a volume (e.g. --volume=/home/user/my_data:/data) and then access to that volume, but in this case it does not work due to user permissions since the wineuser can't access that directory. An obvious solution is to give proper permissions to that directory so that it can write in it, but I would like to ask you if there is a more elegant and general solution.

Regards,

Hugo.

Add RDP access

I've had a user ask about how you could VNC onto the container and after having a look around, I've seen that using xrdp is a pretty good solution that others have used that also works with sound.

RDP clients are generally easier to set up and use and are available on pretty much any platform so I think this may be a solution to the poor performance and lack of sound on macOS.

Graphics not working with wine user!

Oops - so, it seems like you either need to use the same uid as the current user or log in as root so you can use the .Xauthority magic cookie. So, easiest solution would be to reintroduce the entrypoint.sh script to allow user and permissions to be set up correctly

winetricks can't find winbind(d)

Dockerfile installs winbind package correctly, but the winbindd is not added to PATH environmental variable. So if you for example try to install winetricks adobe_diged4 the script complains about winbindd. If you modify PATH and add /usr/sbin, it works.

Too slow?

I just want to be able to call into a win32 .exe that loads a .dll from Mac/Linux through Docker. No X11 or any of that (just command line program)

FROM scottyhardy/docker-wine:latest
COPY program.exe .
ENTRYPOINT ["wine", "program.exe", "my-dll.dll", "arg1", "arg2"]
$ time docker run -it c2e34e3ab4a7
wine: created the configuration directory '/root/.wine'
0012:err:ole:marshal_object couldn't get IPSFactory buffer for interface {00000131-0000-0000-c000-000000000046}
0012:err:ole:marshal_object couldn't get IPSFactory buffer for interface {6d5140c1-7436-11ce-8034-00aa006009fa}
0012:err:ole:StdMarshalImpl_MarshalInterface Failed to create ifstub, hres=0x80004002
0012:err:ole:CoMarshalInterface Failed to marshal the interface {6d5140c1-7436-11ce-8034-00aa006009fa}, 80004002
0012:err:ole:get_local_server_stream Failed: 80004002
000b:err:winediag:nodrv_CreateWindow Application tried to create a window, but no driver could be loaded.
000b:err:winediag:nodrv_CreateWindow Make sure that your X server is running and that $DISPLAY is set correctly.
0014:err:winediag:nodrv_CreateWindow Application tried to create a window, but no driver could be loaded.
0014:err:winediag:nodrv_CreateWindow Make sure that your X server is running and that $DISPLAY is set correctly.
0014:err:ole:apartment_createwindowifneeded CreateWindow failed with error 0
0014:err:ole:apartment_createwindowifneeded CreateWindow failed with error 0
0014:err:ole:marshal_object couldn't get IPSFactory buffer for interface {00000131-0000-0000-c000-000000000046}
0014:err:ole:apartment_createwindowifneeded CreateWindow failed with error 14007
0014:err:ole:StdMarshalImpl_MarshalInterface Failed to create ifstub, hres=0x800736b7
0014:err:ole:CoMarshalInterface Failed to marshal the interface {6d5140c1-7436-11ce-8034-00aa006009fa}, 800736b7
0014:err:ole:get_local_server_stream Failed: 800736b7
0010:err:winediag:nodrv_CreateWindow Application tried to create a window, but no driver could be loaded.
0010:err:winediag:nodrv_CreateWindow Make sure that your X server is running and that $DISPLAY is set correctly.


0016:fixme:ntdll:NtLockFile I/O completion on lock not implemented yet
0016:fixme:ntdll:NtQuerySystemInformation info_class SYSTEM_PERFORMANCE_INFORMATION
0016:err:mscoree:LoadLibraryShim error reading registry key for installroot
0016:err:mscoree:LoadLibraryShim error reading registry key for installroot
0016:err:mscoree:LoadLibraryShim error reading registry key for installroot
0016:err:mscoree:LoadLibraryShim error reading registry key for installroot


0018:fixme:ntdll:NtLockFile I/O completion on lock not implemented yet
0018:fixme:ntdll:NtQuerySystemInformation info_class SYSTEM_PERFORMANCE_INFORMATION
0018:err:mscoree:LoadLibraryShim error reading registry key for installroot
0018:err:mscoree:LoadLibraryShim error reading registry key for installroot
0018:err:mscoree:LoadLibraryShim error reading registry key for installroot
0018:err:mscoree:LoadLibraryShim error reading registry key for installroot


0018:fixme:msi:internal_ui_handler internal UI not implemented for message 0x0b000000 (UI level = 5)
0018:fixme:msi:internal_ui_handler internal UI not implemented for message 0x0b000000 (UI level = 5)
0016:fixme:msi:internal_ui_handler internal UI not implemented for message 0x0b000000 (UI level = 1)
0016:fixme:msi:internal_ui_handler internal UI not implemented for message 0x0b000000 (UI level = 1)
001e:fixme:ntdll:NtLockFile I/O completion on lock not implemented yet
001e:fixme:ntdll:NtQuerySystemInformation info_class SYSTEM_PERFORMANCE_INFORMATION
001e:fixme:msi:internal_ui_handler internal UI not implemented for message 0x0b000000 (UI level = 1)
001e:fixme:msi:internal_ui_handler internal UI not implemented for message 0x0b000000 (UI level = 1)


0010:fixme:dwmapi:DwmIsCompositionEnabled 0000000006970434
0020:fixme:iphlpapi:NotifyIpInterfaceChange (family 0, callback 0x28a306d, context 0x5440b0, init_notify 0, handle 0x779fa00): stub
0010:fixme:ntdll:NtQuerySystemInformation info_class SYSTEM_PERFORMANCE_INFORMATION

003a:err:winediag:nodrv_CreateWindow Application tried to create a window, but no driver could be loaded.
003a:err:winediag:nodrv_CreateWindow Make sure that your X server is running and that $DISPLAY is set correctly.

003c:fixme:ntdll:NtLockFile I/O completion on lock not implemented yet
003c:fixme:ntdll:NtQuerySystemInformation info_class SYSTEM_PERFORMANCE_INFORMATION
003c:err:msi:ACTION_InstallFiles compressed file wasn't installed (L"browser!blocklist.xml")
003c:err:msi:execute_script Execution of script 0 halted; action L"InstallFiles" returned 1603
003c:err:msi:ITERATE_Actions Execution halted, action L"InstallFinalize" returned 1603
003c:fixme:msi:internal_ui_handler internal UI not implemented for message 0x0b000000 (UI level = 1)
003c:fixme:msi:internal_ui_handler internal UI not implemented for message 0x0b000000 (UI level = 1)
003c:err:appwizcpl:install_file MsiInstallProduct failed: 1603
Could not find Wine Gecko. HTML rendering will be disabled.
wine: configuration in L"/root/.wine" has been updated.
1cd58af6

real	0m48.287s
user	0m0.059s
sys	0m0.034s

Takes 48 seconds when the program itself running should take less than 0.1s natively. Any command line options I can pass to skip X11/Gecko/etc. checks to speed it up?

No RDP image option

The current image is getting quite large - currently around 1GB. A lot of the bloat comes from RDP and associated GUI and it quite likely isn’t required in many use cases. It’s not been a complaint so I’m still going to use an image that includes RDP by default, but I want to have a --nordp option for users who don’t need RDP and who also prefer a smaller image without the additional bloat.

Support `RUN wineconsole ...` from within Dockerfile

I am doing something really gross. I have .DLLs that I want to call into from node.js.

FROM scottyhardy/docker-wine:latest
WORKDIR /app
# copy source
COPY server.js .
COPY package.json .
COPY package-lock.json .
# copy executable
COPY seed-key.exe .
COPY library.dll .
# copy win32 node
COPY node-v12.18.3-win-x86 node-v12.18.3-win-x86
# install modules
RUN wineconsole --backend=curses /app/node-v12.18.3-win-x86/node.exe /app/node-v12.18.3-win-x86/node_modules/npm/bin/npm-cli.js install

then in node.js

const express = require('express')
const execa = require('execa')
const cors = require('cors')

const app = express()
app.use(express.json())
app.post('/security-access', async (req, res) => {
  const { dll, level, seed } = req.body
  const { stdout } = await execa('seed-key.exe', [dll, level, seed])
  res.send({
    key: stdout.trim()
  })
})
app.listen(process.env.PORT || 3000, () => console.log('Listening...'))

wineconsole errors out hard because it is expecting some kind of... pipe or TTY or something and in the docker build context, that isn't possible (no stdin)

What do you recommend?

Ideally I'd like to add ENTRYPOINT ["wineconsole", "--backend=curses", "/app/node-v12.18.3-win-x86/node.exe", "server.js"] at the end too but it has a similar problem.

Create window failing

Hello,

When i try to run the notepad application, i get the below error :

wine /home/wineuser/.wine/drive_c/windows/syswow64/notepad.exe
0009:err:winediag:nodrv_CreateWindow Application tried to create a window, but no driver could be loaded.
0009:err:winediag:nodrv_CreateWindow Make sure that your X server is running and that $DISPLAY is set correctly.

Rename user 'wine' to 'wineuser' for clarity

All references to the user 'wine' should be changed to 'wineuser' as it's confusing if the term wine relates to the user or the program and always needs clarification in documentation.

  • rename user wine in readme
  • rename user wine in dockerfile
  • rename user wine in docker-wine script
  • rename docker volume winehome to wineuserhome in readme, dockerfile and docker-wine script

Network access

Hi there,

I want to initialize the Docker container with the same network as the Host machine (using the active VPN network).

Then, my Windows programs will be able to use this network.

It appears the docker-wine container doesn't have network configured. Is that true?

I tried to edit the docker-wine script and put a --network=host there. Also I tried to install ping and ping www.google.com but no success.

Is there an option to fix that without changing the script? Or any workaround for the moment?

Thanks in advance

Use socat with UNIX sockets over UDP on macOS

I’ve seen people trying to use socat on macOS with Xquartz but only on the host machine and getting the same poor performance when you run X11 over TCP directly to Xquartz with network connections enabled. I want to try using socat both within the container and on the Mac with UDP connection if possible to see if there’s any performance gain. Either way, it’ll provide a general use case for sharing any type of UNIX socket “invisibly” between the OS in a docker container and macOS.

Basic video test fails

hey there, i can't seem to get the image or script to work. it pulls the image fine, and running the script without arguments gives a bash shell as expected, but running the suggested troubleshooting command fails:

$ docker-wine wine notepad
latest: Pulling from scottyhardy/docker-wine
Digest: sha256:59aedd84889b55825008e084e8b17752166e266760522e21a800c4c6558415d7
Status: Image is up to date for scottyhardy/docker-wine:latest
INFO: Using existing Docker volume container 'winehome'...
No protocol specified
0010:err:ole:marshal_object couldn't get IPSFactory buffer for interface {00000131-0000-0000-c000-000000000046}
0010:err:ole:marshal_object couldn't get IPSFactory buffer for interface {6d5140c1-7436-11ce-8034-00aa006009fa}
0010:err:ole:StdMarshalImpl_MarshalInterface Failed to create ifstub, hres=0x80004002
0010:err:ole:CoMarshalInterface Failed to marshal the interface {6d5140c1-7436-11ce-8034-00aa006009fa}, 80004002
0010:err:ole:get_local_server_stream Failed: 80004002
0009:err:winediag:nodrv_CreateWindow Application tried to create a window, but no driver could be loaded.
0009:err:winediag:nodrv_CreateWindow Make sure that your X server is running and that $DISPLAY is set correctly.

okay, not sure what any of that means -- let's check $DISPLAY:

$ echo $DISPLAY
:0

seems fine to me?

as a test, let's delete the winehome volume just in case:

$ docker volume rm winehome
winehome
$ docker-wine wine notepad
latest: Pulling from scottyhardy/docker-wine
Digest: sha256:59aedd84889b55825008e084e8b17752166e266760522e21a800c4c6558415d7
Status: Image is up to date for scottyhardy/docker-wine:latest
INFO: Creating Docker volume container 'winehome'...
winehome
wine: created the configuration directory '/home/wineuser/.wine'
0009:err:file:init_redirects cannot open L"C:\\windows" (c000000f)
No protocol specified
No protocol specified
0012:err:ole:marshal_object couldn't get IPSFactory buffer for interface {00000131-0000-0000-c000-000000000046}
0012:err:ole:marshal_object couldn't get IPSFactory buffer for interface {6d5140c1-7436-11ce-8034-00aa006009fa}
0012:err:ole:StdMarshalImpl_MarshalInterface Failed to create ifstub, hres=0x80004002
0012:err:ole:CoMarshalInterface Failed to marshal the interface {6d5140c1-7436-11ce-8034-00aa006009fa}, 80004002
0012:err:ole:get_local_server_stream Failed: 80004002
0014:err:winediag:nodrv_CreateWindow Application tried to create a window, but no driver could be loaded.
0014:err:winediag:nodrv_CreateWindow Make sure that your X server is running and that $DISPLAY is set correctly.
0014:err:ole:apartment_createwindowifneeded CreateWindow failed with error 0
0010:err:winediag:nodrv_CreateWindow Application tried to create a window, but no driver could be loaded.
0010:err:winediag:nodrv_CreateWindow Make sure that your X server is running and that $DISPLAY is set correctly.
0014:err:ole:apartment_createwindowifneeded CreateWindow failed with error 0
0014:err:ole:marshal_object couldn't get IPSFactory buffer for interface {00000131-0000-0000-c000-000000000046}
0014:err:ole:apartment_createwindowifneeded CreateWindow failed with error 14007
0014:err:ole:StdMarshalImpl_MarshalInterface Failed to create ifstub, hres=0x800736b7
0014:err:ole:CoMarshalInterface Failed to marshal the interface {6d5140c1-7436-11ce-8034-00aa006009fa}, 800736b7
0014:err:ole:get_local_server_stream Failed: 800736b7
000b:err:winediag:nodrv_CreateWindow Application tried to create a window, but no driver could be loaded.
000b:err:winediag:nodrv_CreateWindow Make sure that your X server is running and that $DISPLAY is set correctly.
0016:fixme:ntdll:NtLockFile I/O completion on lock not implemented yet
0016:err:mscoree:LoadLibraryShim error reading registry key for installroot
0016:err:mscoree:LoadLibraryShim error reading registry key for installroot
0016:err:mscoree:LoadLibraryShim error reading registry key for installroot
0016:err:mscoree:LoadLibraryShim error reading registry key for installroot
0018:err:winediag:nodrv_CreateWindow Application tried to create a window, but no driver could be loaded.
0018:err:winediag:nodrv_CreateWindow Make sure that your X server is running and that $DISPLAY is set correctly.
0016:fixme:msi:internal_ui_handler internal UI not implemented for message 0x0b000000 (UI level = 1)
0016:fixme:msi:internal_ui_handler internal UI not implemented for message 0x0b000000 (UI level = 1)
001a:fixme:ntdll:NtLockFile I/O completion on lock not implemented yet
001a:fixme:msi:internal_ui_handler internal UI not implemented for message 0x0b000000 (UI level = 1)
001a:fixme:msi:internal_ui_handler internal UI not implemented for message 0x0b000000 (UI level = 1)
0010:fixme:dwmapi:DwmIsCompositionEnabled 0x6dbd1518
001c:fixme:iphlpapi:NotifyIpInterfaceChange (family 0, callback 0x69ebd3de, context 0x8565c0, init_notify 0, handle 0x114fa10): stub
0036:err:winediag:nodrv_CreateWindow Application tried to create a window, but no driver could be loaded.
0036:err:winediag:nodrv_CreateWindow Make sure that your X server is running and that $DISPLAY is set correctly.
0038:fixme:ntdll:NtLockFile I/O completion on lock not implemented yet
0038:fixme:msi:internal_ui_handler internal UI not implemented for message 0x0b000000 (UI level = 1)
0038:fixme:msi:internal_ui_handler internal UI not implemented for message 0x0b000000 (UI level = 1)
0036:fixme:dwmapi:DwmIsCompositionEnabled 0x6d5d3018
003a:fixme:iphlpapi:NotifyIpInterfaceChange (family 0, callback 0x6a0cb608, context 0x8d88c8, init_notify 0, handle 0x111fc88): stub
wine: configuration in '/home/wineuser/.wine' has been updated.
0009:err:winediag:nodrv_CreateWindow Application tried to create a window, but no driver could be loaded.
0009:err:winediag:nodrv_CreateWindow Make sure that your X server is running and that $DISPLAY is set correctly.

that seems worse, not better!

this is on ubuntu 16.04. here's some additional output in case it helps diagnose this:

$ uname -a
Linux tekkon 4.15.0-51-generic #55~16.04.1-Ubuntu SMP Thu May 16 09:24:37 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

$ docker version
Client:
 Version:           18.09.6
 API version:       1.39
 Go version:        go1.10.8
 Git commit:        481bc77
 Built:             Sat May  4 02:35:27 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          18.09.6
  API version:      1.39 (minimum version 1.12)
  Go version:       go1.10.8
  Git commit:       481bc77
  Built:            Sat May  4 01:59:36 2019
  OS/Arch:          linux/amd64
  Experimental:     false

can we remove 32-bit support

The dpkg --add-architecture i386 line in Dockerfile significantly increases build time and size as it pulls down 32-bit versions of all packages... Need to test if wine still functions ok without it

Last update prevents installing certain dlls

I have used the image couple of months ago to run a Windows program which required some DLL and fonts that I had to install through winetricks. It went fine at that time but for some issues, the image crashed and I had to create a new volume and redo the installation. This time when I tried with the new updated image I was not able to install the dependencies, I got a winetricks warning regarding the wine prefix and architecture:
_

You are using a 64-bit WINEPREFIX. Note that many verbs only install 32-bit versions of packages. If you encounter problems, please retest in a clean 32-bit WINEPREFIX before reporting a bug.

_
which I changed to 32 bit hoping it would fix the issue. However, every time I try to install the dlls (mdac 28 , or 27) I get the following message:

Extracting file failed. It is most likely caused by low memory or corrupted Cabinet file.

This error is due to running mdac_typ.exe. I am curious to know what changes were made to the image to help me find the issue and fix it?

Download mono and gecko in Dockerfile

These were removed in latest overhaul but would like these to be reintroduced so users don’t need to download on first run. This time, need to automatically determine latest version rather than stating fixed version as a build arg

VNC server support

Thanks for a already great container. From what I understand, RDP does not support sharing screen with other clients. On the other hand VNC supports that and it would be great if the container also "natively" supported hosting a VNC server. It may also be a better alternative to RDP client for Linux users. I could install it as a additional layer, but I believe that it could be a useful feature for other users.
Thanks!

Add no sound option

Currently no way to disable sound or prevent creation of pulseaudio UNIX socket on Linux, so let’s add an option to do that (also applies to macOS and RDP)

X11 not working

Using Ubuntu 18.04 and latest version of docker ce 18.09.5 - .Xauthority does not appear to be copied into wine user's home

Error 1603 causing problems

Describe the bug
Notepad fails to start

To Reproduce

~/Documents/docker-wine master
❯ ./docker-wine wine nodepad
WARNING: Adding localhost to authorized xhost clients
127.0.0.1 being added to access control list
latest: Pulling from scottyhardy/docker-wine
a4a2a29f9ba4: Already exists
127c9761dcba: Already exists
d13bf203e905: Already exists
4039240d2e0b: Already exists
5d07b2d7b241: Pull complete
ef5bd0f71098: Pull complete
fedbac49e6b6: Pull complete
50cbc4230e2a: Pull complete
bf42cddac205: Pull complete
652358c55532: Pull complete
c458f9b06186: Pull complete
826cdd458b40: Pull complete
f445f081a747: Pull complete
a904c7197f90: Pull complete
10b48e7b8e78: Pull complete
Digest: sha256:c16c8ed363594986347422be626bd0bca8e2693098b98add4d854b8c6e86da51
Status: Downloaded newer image for scottyhardy/docker-wine:latest
docker.io/scottyhardy/docker-wine:latest
INFO: Creating Docker volume container 'winehome'...
winehome
wine: created the configuration directory '/home/wineuser/.wine'
0014:err:ole:marshal_object couldn't get IPSFactory buffer for interface {00000131-0000-0000-c000-000000000046}
0014:err:ole:marshal_object couldn't get IPSFactory buffer for interface {6d5140c1-7436-11ce-8034-00aa006009fa}
0014:err:ole:StdMarshalImpl_MarshalInterface Failed to create ifstub, hres=0x80004002
0014:err:ole:CoMarshalInterface Failed to marshal the interface {6d5140c1-7436-11ce-8034-00aa006009fa}, 80004002
0014:err:ole:get_local_server_stream Failed: 80004002
0012:err:ole:marshal_object couldn't get IPSFactory buffer for interface {00000131-0000-0000-c000-000000000046}
0012:err:ole:marshal_object couldn't get IPSFactory buffer for interface {6d5140c1-7436-11ce-8034-00aa006009fa}
0012:err:ole:StdMarshalImpl_MarshalInterface Failed to create ifstub, hres=0x80004002
0012:err:ole:CoMarshalInterface Failed to marshal the interface {6d5140c1-7436-11ce-8034-00aa006009fa}, 80004002
0012:err:ole:get_local_server_stream Failed: 80004002
0017:fixme:ntdll:NtLockFile I/O completion on lock not implemented yet
0017:fixme:ntdll:NtQuerySystemInformation info_class SYSTEM_PERFORMANCE_INFORMATION
0017:err:mscoree:LoadLibraryShim error reading registry key for installroot
0017:err:mscoree:LoadLibraryShim error reading registry key for installroot
0017:err:mscoree:LoadLibraryShim error reading registry key for installroot
0017:err:mscoree:LoadLibraryShim error reading registry key for installroot
0019:fixme:ntdll:NtLockFile I/O completion on lock not implemented yet
0019:fixme:ntdll:NtQuerySystemInformation info_class SYSTEM_PERFORMANCE_INFORMATION
0019:err:mscoree:LoadLibraryShim error reading registry key for installroot
0019:err:mscoree:LoadLibraryShim error reading registry key for installroot
0019:err:mscoree:LoadLibraryShim error reading registry key for installroot
0019:err:mscoree:LoadLibraryShim error reading registry key for installroot
0019:fixme:msi:internal_ui_handler internal UI not implemented for message 0x0b000000 (UI level = 5)
0019:fixme:msi:internal_ui_handler internal UI not implemented for message 0x0b000000 (UI level = 5)
0017:fixme:msi:internal_ui_handler internal UI not implemented for message 0x0b000000 (UI level = 1)
0017:fixme:msi:internal_ui_handler internal UI not implemented for message 0x0b000000 (UI level = 1)
001f:fixme:ntdll:NtLockFile I/O completion on lock not implemented yet
001f:fixme:ntdll:NtQuerySystemInformation info_class SYSTEM_PERFORMANCE_INFORMATION
001f:fixme:msi:internal_ui_handler internal UI not implemented for message 0x0b000000 (UI level = 1)
001f:fixme:msi:internal_ui_handler internal UI not implemented for message 0x0b000000 (UI level = 1)
0010:fixme:dwmapi:DwmIsCompositionEnabled 0000000006970434
0021:fixme:iphlpapi:NotifyIpInterfaceChange (family 0, callback 0x28a306d, context 0x5440b0, init_notify 0, handle 0x779fa00): stub
0010:fixme:ntdll:NtQuerySystemInformation info_class SYSTEM_PERFORMANCE_INFORMATION
003d:fixme:ntdll:NtLockFile I/O completion on lock not implemented yet
003d:fixme:ntdll:NtQuerySystemInformation info_class SYSTEM_PERFORMANCE_INFORMATION
003d:err:msi:ACTION_InstallFiles compressed file wasn't installed (L"browser!blocklist.xml")
003d:err:msi:execute_script Execution of script 0 halted; action L"InstallFiles" returned 1603
003d:err:msi:ITERATE_Actions Execution halted, action L"InstallFinalize" returned 1603
003d:fixme:msi:internal_ui_handler internal UI not implemented for message 0x0b000000 (UI level = 1)
003d:fixme:msi:internal_ui_handler internal UI not implemented for message 0x0b000000 (UI level = 1)
003d:err:appwizcpl:install_file MsiInstallProduct failed: 1603
Could not find Wine Gecko. HTML rendering will be disabled.
wine: configuration in L"/home/wineuser/.wine" has been updated.
0009:err:module:__wine_process_init L"C:\\windows\\system32\\nodepad.exe" not found

Desktop (please complete the following information):

  • OS: macOS Catalina 10.15.4 (19E287)
  • Browser: Chrome...
  • Version: master fa5877c

Additional context
Been running in to this 1603 failure pretty repeatedly but not sure what's causing it.

Create wine-devel image

Master branch is using wine-stable 4.0 and would like to continue using stable version for latest tag in Docker Hub

  • create new branch wine-devel for releases
  • create new branch dev/wine-devel for dev commits
  • modify wine-devel and dev/wine-devel branch permissions to ensure they stay evergreen
  • latest version of wine-devel will be labelled just wine-devel on Docker Hub
  • for clear differentiation, use wine-devel- for tagging versions of the wine-devel branch

Upgrade base to Ubuntu 18.04

Using Ubuntu 18.04 for my OS so would prefer containers to do the same... Alpine would probably be better size-wise but not sure of wine compatibility with other OSes

Unable to build locally

Describe the bug
I am try to build the image locally following the README instructions.

To Reproduce
Steps to reproduce the behavior:

  1. Go to docker-wine
  2. Run make
  3. The following error during the build occurs:
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 winehq-stable : Depends: wine-stable (= 4.0.1~bionic)
E: Unable to correct problems, you have held broken packages.
The command '/bin/sh -c wget https://dl.winehq.org/wine-builds/winehq.key     && apt-key add winehq.key     && apt-add-repository "deb https://dl.winehq.org/wine-builds/ubuntu/ bionic main"     && dpkg --add-architecture i386     && apt-get update     && apt-get install -y --install-recommends winehq-${WINEBRANCH}="${WINE_VER}"     && rm -rf /var/lib/apt/lists/*     && rm winehq.key' returned a non-zero code: 100
Makefile:7: recipe for target 'build' failed
make: *** [build] Error 100

Desktop (please complete the following information):

  • OS: Ubuntu 18.04.4 LTS (4.15.0-91-generic)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.