Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bind mounts on Windows behave inconsistently #13502

Open
3 tasks done
danielschenk opened this issue May 23, 2023 · 2 comments
Open
3 tasks done

Bind mounts on Windows behave inconsistently #13502

danielschenk opened this issue May 23, 2023 · 2 comments

Comments

@danielschenk
Copy link

danielschenk commented May 23, 2023

  • I have tried with the latest version of Docker Desktop
  • I have tried disabling enabled experimental features
  • I have uploaded Diagnostics
  • Diagnostics ID: Diagnostics not working, it seems not to understand that I'm using Windows containers, and it seems to want to connect to the Linux backend instead. See output below.

Actual behavior

Building a Visual Studio 2017 project with vcpkg dependencies and Program Database debug files, while vcpkg and the project repo are in a bind mount, results in various file I/O errors. For example, this one raised by vcpkg/cmake:

C:\build\submodules\vcpkg\scripts\buildsystems\msbuild\vcpkg.targets(183,5): warning : error: Expected C:\build\submodules\vcpkg\downloads\tools\7zip-21.07-windows\7za.exe to exist after fetching [C:\build\Application\Application.vcxproj]

Or this one raised by pip, while installing packages into a virtual environment living in a bind mount (moving the virtualenv inside of the container, outside of the bind mount, gets rid of the issue):

Collecting lxml~=4.9.3
    Using cached lxml-4.9.3-cp310-cp310-win_amd64.whl (3.8 MB)
  Collecting PySide6~=6.5.2
    Using cached PySide6-6.5.3-cp37-abi3-win_amd64.whl (7.2 kB)
  Collecting jinja2~=3.1.2
    Using cached Jinja2-3.1.2-py3-none-any.whl (133 kB)
  Collecting click~=8.1.3
    Using cached click-8.1.7-py3-none-any.whl (97 kB)
  Collecting PySide6-Essentials==6.5.3
    Using cached PySide6_Essentials-6.5.3-cp37-abi3-win_amd64.whl (73.3 MB)
  Collecting shiboken6==6.5.3
    Using cached shiboken6-6.5.3-cp37-abi3-win_amd64.whl (1.1 MB)
  Collecting PySide6-Addons==6.5.3
    Using cached PySide6_Addons-6.5.3-cp37-abi3-win_amd64.whl (111.9 MB)
  Collecting MarkupSafe>=2.0
    Using cached MarkupSafe-2.1.3-cp310-cp310-win_amd64.whl (17 kB)
  Requirement already satisfied: colorama in c:\build\.venv\lib\site-packages (from click~=8.1.3->-r ..\requirements-build.txt (line 4)) (0.4.6)
EXEC : error : Could not install packages due to an OSError: [Errno 2] No such file or directory: 'c:\\build\\.venv\\lib\\site-packages\\colorama-0.4.6.dist-info\\METADATA' [C:\build\Kernel\Kernel.vcxproj]

Or the one referenced in this issue: #829

Expected behavior

Building a Visual Studio 2017 project with vcpkg dependencies and Program Database debug files, while vcpkg and the project repo are in a bind mount, works as expected.

I can't use --isolation=process because my host is Win10 while the image is WinServer2019 based. Also, process isolation mode doesn't seem to get around all FS inconsistency issues we see.

Information

  • Windows Version:
Edition	Windows 10 Pro
Version	22H2
Installed on	‎10-‎1-‎2023
OS build	19045.2965
Experience	Windows Feature Experience Pack 1000.19041.1000.0
  • Docker Desktop Version: 4.19.0 (106363)
  • WSL2 or Hyper-V backend? WSL2 backend is enabled, but using Windows containers, so Hyper-V I'm guessing?
  • Are you running inside a virtualized Windows e.g. on a cloud server or a VM: no

Output of & "C:\Program Files\Docker\Docker\resources\com.docker.diagnose.exe" check

[2023-05-23T09:24:26.434728500Z][com.docker.diagnose.exe][I] set path configuration to OnHost
Starting diagnostics

[PASS] DD0027: is there available disk space on the host?
[PASS] DD0028: is there available VM disk space?
[PASS] DD0002: does the bootloader have virtualization enabled?
[SKIP] DD0018: does the host support virtualization?
[PASS] DD0001: is the application running?
[PASS] DD0017: can a VM be started?
[PASS] DD0016: is the LinuxKit VM running?
[FAIL] DD0011: are the LinuxKit services running? failed to ping VM diagnosticsd with error: Get "http://ipc/ping": open \\.\pipe\dockerDiagnosticd: The system cannot find the file specified.
[2023-05-23T09:24:28.084931000Z][com.docker.diagnose.exe][I] ipc.NewClient: 482677af-diagnose -> \\.\pipe\dockerDiagnosticd diagnosticsd
[2023-05-23T09:24:28.084931000Z][com.docker.diagnose.exe][I] (57508d03) 482677af-diagnose C->S diagnosticsd GET /ping
[2023-05-23T09:24:28.085462800Z][com.docker.diagnose.exe][W] (57508d03) 482677af-diagnose C<-S NoResponse GET /ping (531.8µs): Get "http://ipc/ping": open \\.\pipe\dockerDiagnosticd: The system cannot find the file specified.

[PASS] DD0023: is the Containers Windows Feature enabled?
[FAIL] DD0004: is the Docker engine running? Get "http://ipc/docker": open \\.\pipe\dockerLifecycleServer: The system cannot find the file specified.
[2023-05-23T09:24:28.532156300Z][com.docker.diagnose.exe][I] ipc.NewClient: b24cc2fa-com.docker.diagnose -> \\.\pipe\dockerLifecycleServer VMDockerdAPI
[2023-05-23T09:24:28.532669000Z][com.docker.diagnose.exe][I] (cec1fe59) b24cc2fa-com.docker.diagnose C->S VMDockerdAPI GET /docker
[2023-05-23T09:24:28.532691700Z][com.docker.diagnose.exe][W] (cec1fe59) b24cc2fa-com.docker.diagnose C<-S NoResponse GET /docker (22.7µs): Get "http://ipc/docker": open \\.\pipe\dockerLifecycleServer: The system cannot find the file specified.
[2023-05-23T09:24:28.532691700Z][com.docker.diagnose.exe][I] (cec1fe59-1) b24cc2fa-com.docker.diagnose C->S VMDockerdAPI GET /ping
[2023-05-23T09:24:28.533252900Z][com.docker.diagnose.exe][W] (cec1fe59-1) b24cc2fa-com.docker.diagnose C<-S NoResponse GET /ping (561.2µs): Get "http://ipc/ping": open \\.\pipe\dockerLifecycleServer: The system cannot find the file specified.
[2023-05-23T09:24:29.535443400Z][com.docker.diagnose.exe][I] (cec1fe59-2) b24cc2fa-com.docker.diagnose C->S VMDockerdAPI GET /ping
[2023-05-23T09:24:29.536044500Z][com.docker.diagnose.exe][W] (cec1fe59-2) b24cc2fa-com.docker.diagnose C<-S NoResponse GET /ping (512.4µs): Get "http://ipc/ping": open \\.\pipe\dockerLifecycleServer: The system cannot find the file specified.
[2023-05-23T09:24:30.542938400Z][com.docker.diagnose.exe][I] (cec1fe59-3) b24cc2fa-com.docker.diagnose C->S VMDockerdAPI GET /ping
[2023-05-23T09:24:30.543680500Z][com.docker.diagnose.exe][W] (cec1fe59-3) b24cc2fa-com.docker.diagnose C<-S NoResponse GET /ping (742.1µs): Get "http://ipc/ping": open \\.\pipe\dockerLifecycleServer: The system cannot find the file specified.
[2023-05-23T09:24:31.555572700Z][com.docker.diagnose.exe][I] (cec1fe59-4) b24cc2fa-com.docker.diagnose C->S VMDockerdAPI GET /ping
[2023-05-23T09:24:31.555572700Z][com.docker.diagnose.exe][W] (cec1fe59-4) b24cc2fa-com.docker.diagnose C<-S NoResponse GET /ping (0s): Get "http://ipc/ping": open \\.\pipe\dockerLifecycleServer: The system cannot find the file specified.
[2023-05-23T09:24:32.564901300Z][com.docker.diagnose.exe][I] (cec1fe59-5) b24cc2fa-com.docker.diagnose C->S VMDockerdAPI GET /ping
[2023-05-23T09:24:32.565658000Z][com.docker.diagnose.exe][W] (cec1fe59-5) b24cc2fa-com.docker.diagnose C<-S NoResponse GET /ping (756.7µs): Get "http://ipc/ping": open \\.\pipe\dockerLifecycleServer: The system cannot find the file specified.
[2023-05-23T09:24:33.576780600Z][com.docker.diagnose.exe][I] (cec1fe59-6) b24cc2fa-com.docker.diagnose C->S VMDockerdAPI GET /ping
[2023-05-23T09:24:33.576780600Z][com.docker.diagnose.exe][W] (cec1fe59-6) b24cc2fa-com.docker.diagnose C<-S NoResponse GET /ping (0s): Get "http://ipc/ping": open \\.\pipe\dockerLifecycleServer: The system cannot find the file specified.
[2023-05-23T09:24:34.577993200Z][com.docker.diagnose.exe][I] (cec1fe59-7) b24cc2fa-com.docker.diagnose C->S VMDockerdAPI GET /ping
[2023-05-23T09:24:34.578422900Z][com.docker.diagnose.exe][W] (cec1fe59-7) b24cc2fa-com.docker.diagnose C<-S NoResponse GET /ping (429.7µs): Get "http://ipc/ping": open \\.\pipe\dockerLifecycleServer: The system cannot find the file specified.
[2023-05-23T09:24:35.587142000Z][com.docker.diagnose.exe][I] (cec1fe59-8) b24cc2fa-com.docker.diagnose C->S VMDockerdAPI GET /ping
[2023-05-23T09:24:35.587142000Z][com.docker.diagnose.exe][W] (cec1fe59-8) b24cc2fa-com.docker.diagnose C<-S NoResponse GET /ping (0s): Get "http://ipc/ping": open \\.\pipe\dockerLifecycleServer: The system cannot find the file specified.

[PASS] DD0015: are the binary symlinks installed?
[FAIL] DD0031: does the Docker API work? error during connect: in the default daemon configuration on Windows, the docker client must be run with elevated privileges to connect: Get "http://%2F%2F.%2Fpipe%2Fdocker_engine_linux/v1.24/containers/json": open //./pipe/docker_engine_linux: The system cannot find the file specified.
[PASS] DD0013: is the $PATH ok?
[PASS] DD0003: is the Docker CLI working?
[PASS] DD0005: is the user in the docker-users group?
[PASS] DD0038: is the connection to Docker working?
2023/05/23 11:24:36 error checking if default wsl distro is running: exit status 0xffffffff

Steps to reproduce the behavior

  1. Create a Visual Studio 2017 C++ project which uses Program Database debug files (the default) and some vcpkg dependencies (in my case, it depends on gRPC)
  2. Create a Windows Server 2019 .NET based image with the Visual Studio 2017 build tools and C++ workload installed. Steps we use for this (partial copy from our Dockerfile):
FROM mcr.microsoft.com/dotnet/framework/sdk:4.8-windowsservercore-ltsc2019

ARG VS_2017=1

SHELL ["cmd", "/S", "/C"]
ADD ["https://aka.ms/vs/15/release/channel", "C:\\TEMP\\VisualStudio-2017.chman"]
ADD https://aka.ms/vs/17/release/vs_buildtools.exe C:\TEMP\vs_buildtools.exe
RUN if %VS_2017% == 1 C:\TEMP\vs_buildtools.exe --quiet --wait --norestart --nocache `
    --installPath C:\BuildTools\2017 `
    --channelUri C:\TEMP\VisualStudio-2017.chman `
    --installChannelUri C:\TEMP\VisualStudio-2017.chman `
    --add Microsoft.VisualStudio.Workload.VCTools `
    --includeRecommended `
    --add Microsoft.VisualStudio.Component.VC.ATLMFC `
    || IF "%ERRORLEVEL%"=="3010" EXIT 0
RUN if %VS_2017% == 1 setx devshell "C:\\BuildTools\\2017\\Common7\\Tools\\VsDevCmd.bat"

ENTRYPOINT %devshell% && powershell.exe -NoLogo -ExecutionPolicy Bypass
  1. Run msbuild with that image, and the project mounted via a bind mount
@danielschenk
Copy link
Author

Added a minimal Dockerfile to aid reproducing the issue.

@danielschenk danielschenk changed the title vcpkg and msbuild not working with bind mounts Bind mounts on Windows behave inconsistently Nov 2, 2023
@danielschenk
Copy link
Author

Added another example of a failing command which I presume is caused by the same issue. Also seeing this on docker-ce 24.0.7.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants