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

[Bug]: invalid mount config for type "bind" #1367

Closed
sebastianbuechler opened this issue Jul 21, 2023 · 8 comments · Fixed by #1458
Closed

[Bug]: invalid mount config for type "bind" #1367

sebastianbuechler opened this issue Jul 21, 2023 · 8 comments · Fixed by #1458
Labels
bug An issue with the library

Comments

@sebastianbuechler
Copy link
Contributor

Testcontainers version

0.21.0

Using the latest Testcontainers version?

Yes

Host OS

Windows

Host arch

amd64

Go version

1.20.5

Docker version

Client:
 Cloud integration: v1.0.35
 Version:           24.0.2
 API version:       1.43
 Go version:        go1.20.4
 Git commit:        cb74dfc
 Built:             Thu May 25 21:53:15 2023
 OS/Arch:           windows/amd64
 Context:           default

Server: Docker Desktop 4.21.1 (114176)
 Engine:
  Version:          24.0.2
  API version:      1.43 (minimum version 1.12)
  Go version:       go1.20.4
  Git commit:       659604f
  Built:            Thu May 25 21:52:17 2023
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.21
  GitCommit:        3dce8eb055cbb6872793272b4f20ed16117344f8
 runc:
  Version:          1.1.7
  GitCommit:        v1.1.7-0-g860f061
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

Docker info

Client:
 Version:    24.0.2
 Context:    default
 Debug Mode: false
 Plugins:
  buildx: Docker Buildx (Docker Inc.)
    Version:  v0.11.0
    Path:     C:\Program Files\Docker\cli-plugins\docker-buildx.exe
  compose: Docker Compose (Docker Inc.)
    Version:  v2.19.1
    Path:     C:\Program Files\Docker\cli-plugins\docker-compose.exe
  dev: Docker Dev Environments (Docker Inc.)
    Version:  v0.1.0
    Path:     C:\Program Files\Docker\cli-plugins\docker-dev.exe
  extension: Manages Docker extensions (Docker Inc.)
    Version:  v0.2.20
    Path:     C:\Program Files\Docker\cli-plugins\docker-extension.exe
  init: Creates Docker-related starter files for your project (Docker Inc.)
    Version:  v0.1.0-beta.6
    Path:     C:\Program Files\Docker\cli-plugins\docker-init.exe
  sbom: View the packaged-based Software Bill Of Materials (SBOM) for an image (Anchore Inc.)
    Version:  0.6.0
    Path:     C:\Program Files\Docker\cli-plugins\docker-sbom.exe
  scan: Docker Scan (Docker Inc.)
    Version:  v0.26.0
    Path:     C:\Program Files\Docker\cli-plugins\docker-scan.exe
  scout: Command line tool for Docker Scout (Docker Inc.)
    Version:  0.16.1
    Path:     C:\Program Files\Docker\cli-plugins\docker-scout.exe

Server:
 Containers: 21
  Running: 13
  Paused: 0
  Stopped: 8
 Images: 40
 Server Version: 24.0.2
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Using metacopy: false
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Cgroup Version: 1
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: runc io.containerd.runc.v2
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 3dce8eb055cbb6872793272b4f20ed16117344f8
 runc version: v1.1.7-0-g860f061
 init version: de40ad0
 Security Options:
  seccomp
   Profile: builtin
 Kernel Version: 5.10.102.1-microsoft-standard-WSL2
 Operating System: Docker Desktop
 OSType: linux
 Architecture: x86_64
 CPUs: 12
 Total Memory: 15.59GiB
 Name: docker-desktop
 ID: 279cb8b1-280d-4432-ab57-1d3efa04c91b
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 HTTP Proxy: http.docker.internal:3128
 HTTPS Proxy: http.docker.internal:3128
 No Proxy: hubproxy.docker.internal
 Experimental: false
 Insecure Registries:
  hubproxy.docker.internal:5555
  127.0.0.0/8
 Live Restore Enabled: false

WARNING: No blkio throttle.read_bps_device support
WARNING: No blkio throttle.write_bps_device support
WARNING: No blkio throttle.read_iops_device support
WARNING: No blkio throttle.write_iops_device support

What happened?

When running test-containers I get the following error:

2023/07/21 12:15:04 github.com/testcontainers/testcontainers-go - Connected to docker: 
  Server Version: 24.0.2
  API Version: 1.42
  Operating System: Docker Desktop
  Total Memory: 15966 MB
2023/07/21 12:15:04 🐳 Creating container for image docker.io/testcontainers/ryuk:0.5.1
2023/07/21 12:15:04 Error response from daemon: invalid mount config for type "bind": bind source path does not exist: /pipe/docker_engine: creating reaper failed: failed to create container
FAIL	github.com/MyOrg/service/src/integration_tests/repository	4.464s
FAIL

It used to run without issues and it still does on Github Actions with a Linux host.

Relevant log output

No response

Additional information

No response

@mdelapenya
Copy link
Collaborator

Interesting... we added explicit code to detect the DockerSocketPath directly from the Docker client in #1294

I wonder if you could debug your tests and put a break point in the docker_socket.go file, its init() function, line 23.

@turt2live
Copy link

I appear to hitting this as well on Windows. The DefaultDockerHost contains the same value from client_windows.go, which is presumably a good thing, but it results in an error trying to setup the ryuk container.

Debugger state:
image

(note that the error breakpoint was skipped because err is nil)

@turt2live
Copy link

As an update, I forcefully overrode the dockerHostMount when the reaper is created, and it worked fine:

image

I haven't tested, but I assume this is a conflict in the Mounts(BindMount(dockerHostMount, "/var/run/docker.sock")) later on, where the source is a named pipe and the target is a unix socket: maybe the error is complaining about a mismatch but is manifesting as "not found"?

@mdelapenya
Copy link
Collaborator

We have setup a windows pipeline that runs the core library tests on a self-hosted windows host. Now I have a way to consistently reproduce the errors (I'm on a Mac M1 and VirtualBox/vagrant does not work well with virtualisation 😢)

A recent CI execution on Windows: https://github.com/testcontainers/testcontainers-go/actions/runs/5784246467/job/15674572952, where I can see and reproduce many of the errors described here:

Socket path calculation

PASS internal/testcontainersdocker.TestExtractDockerHost/Docker_Host_as_extracted_just_once (0.00s)
=== RUN   TestExtractDockerHost/Testcontainers_Host_is_resolved_first
    docker_host_test.go:67: 
        	Error Trace:	C:/actions-runner/_work/testcontainers-go/testcontainers-go/internal/testcontainersdocker/docker_host_test.go:67
        	Error:      	Not equal: 
        	            	expected: "tcp://127.0.0.1:12345"
        	            	actual  : "/path/to/docker.sock"
        	            	
        	            	Diff:
        	            	--- Expected
        	            	+++ Actual
        	            	@@ -1 +1 @@
        	            	-tcp://127.0.0.1:12345
        	            	+/path/to/docker.sock
        	Test:       	TestExtractDockerHost/Testcontainers_Host_is_resolved_first
--- FAIL: TestExtractDockerHost/Testcontainers_Host_is_resolved_first (0.02s)
FAIL internal/testcontainersdocker.TestExtractDockerHost/Testcontainers_Host_is_resolved_first (0.02s)
PASS internal/testcontainersdocker.TestExtractDockerHost/Docker_Host_as_environment_variable (0.00s)
PASS internal/testcontainersdocker.TestExtractDockerHost/Malformed_Docker_Host_is_passed_in_context (0.02s)
PASS internal/testcontainersdocker.TestExtractDockerHost/Malformed_Schema_Docker_Host_is_passed_in_context (0.01s)
PASS internal/testcontainersdocker.TestExtractDockerHost/Unix_Docker_Host_is_passed_in_context (0.00s)
PASS internal/testcontainersdocker.TestExtractDockerHost/Default_Docker_socket (0.02s)
PASS internal/testcontainersdocker.TestExtractDockerHost/Default_Docker_Host_when_empty (0.02s)
=== RUN   TestExtractDockerHost/Extract_Docker_socket/Testcontainers_host_is_defined_in_properties
    docker_host_test.go:133: 
        	Error Trace:	C:/actions-runner/_work/testcontainers-go/testcontainers-go/internal/testcontainersdocker/docker_host_test.go:133
        	Error:      	Expected nil, but got: &errors.errorString{s:"tc.host not set in ~/.testcontainers.properties"}
        	Test:       	TestExtractDockerHost/Extract_Docker_socket/Testcontainers_host_is_defined_in_properties
--- FAIL: TestExtractDockerHost/Extract_Docker_socket/Testcontainers_host_is_defined_in_properties (0.01s)
FAIL internal/testcontainersdocker.TestExtractDockerHost/Extract_Docker_socket/Testcontainers_host_is_defined_in_properties (0.01s)
PASS internal/testcontainersdocker.TestExtractDockerHost/Extract_Docker_socket/Testcontainers_host_is_not_defined_in_properties (0.01s)
PASS internal/testcontainersdocker.TestExtractDockerHost/Extract_Docker_socket/DOCKER_HOST_is_set (0.00s)
PASS internal/testcontainersdocker.TestExtractDockerHost/Extract_Docker_socket/DOCKER_HOST_is_not_set (0.00s)
PASS internal/testcontainersdocker.TestExtractDockerHost/Extract_Docker_socket/TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE_is_set (0.00s)
PASS internal/testcontainersdocker.TestExtractDockerHost/Extract_Docker_socket/TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE_is_not_set (0.00s)
PASS internal/testcontainersdocker.TestExtractDockerHost/Extract_Docker_socket/Context_sets_the_Docker_socket (0.00s)
PASS internal/testcontainersdocker.TestExtractDockerHost/Extract_Docker_socket/Context_sets_a_malformed_Docker_socket (0.00s)
PASS internal/testcontainersdocker.TestExtractDockerHost/Extract_Docker_socket/Context_sets_a_malformed_schema_for_the_Docker_socket (0.00s)
PASS internal/testcontainersdocker.TestExtractDockerHost/Extract_Docker_socket/Docker_socket_exists (0.01s)
=== RUN   TestExtractDockerHost/Extract_Docker_socket/Docker_host_is_defined_in_properties
    docker_host_test.go:[230](https://github.com/testcontainers/testcontainers-go/actions/runs/5784246467/job/15674572952#step:8:231): 
        	Error Trace:	C:/actions-runner/_work/testcontainers-go/testcontainers-go/internal/testcontainersdocker/docker_host_test.go:230
        	Error:      	Expected nil, but got: &errors.errorString{s:"socket not set in ~/.testcontainers.properties"}
        	Test:       	TestExtractDockerHost/Extract_Docker_socket/Docker_host_is_defined_in_properties
--- FAIL: TestExtractDockerHost/Extract_Docker_socket/Docker_host_is_defined_in_properties (0.02s)
FAIL internal/testcontainersdocker.TestExtractDockerHost/Extract_Docker_socket/Docker_host_is_defined_in_properties (0.02s)
PASS internal/testcontainersdocker.TestExtractDockerHost/Extract_Docker_socket/Docker_host_is_not_defined_in_properties (0.01s)
PASS internal/testcontainersdocker.TestExtractDockerHost/Extract_Docker_socket/Docker_socket_does_not_exist (0.00s)
=== RUN   TestExtractDockerHost/Extract_Docker_socket
--- FAIL: TestExtractDockerHost/Extract_Docker_socket (0.06s)
FAIL internal/testcontainersdocker.TestExtractDockerHost/Extract_Docker_socket (0.06s)
=== RUN   TestExtractDockerHost
--- FAIL: TestExtractDockerHost (0.16s)
FAIL internal/testcontainersdocker.TestExtractDockerHost (0.16s)
=== RUN   TestExtractDockerSocketFromClient/Docker_socket_from_Testcontainers_host_defined_in_properties
    docker_host_test.go:278: 
        	Error Trace:	C:/actions-runner/_work/testcontainers-go/testcontainers-go/internal/testcontainersdocker/docker_host_test.go:278
        	Error:      	Not equal: 
        	            	expected: "//./pipe/docker_engine"
        	            	actual  : ""
        	            	
        	            	Diff:
        	            	--- Expected
        	            	+++ Actual
        	            	@@ -1 +1 @@
        	            	-//./pipe/docker_engine
        	            	+
        	Test:       	TestExtractDockerSocketFromClient/Docker_socket_from_Testcontainers_host_defined_in_properties
--- FAIL: TestExtractDockerSocketFromClient/Docker_socket_from_Testcontainers_host_defined_in_properties (0.01s)
FAIL internal/testcontainersdocker.TestExtractDockerSocketFromClient/Docker_socket_from_Testcontainers_host_defined_in_properties (0.01s)
=== RUN   TestExtractDockerSocketFromClient/Docker_socket_from_Testcontainers_host_takes_precedence_over_TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE
    docker_host_test.go:290: 
        	Error Trace:	C:/actions-runner/_work/testcontainers-go/testcontainers-go/internal/testcontainersdocker/docker_host_test.go:290
        	Error:      	Not equal: 
        	            	expected: "//./pipe/docker_engine"
        	            	actual  : "/path/to/docker.sock"
        	            	
        	            	Diff:
        	            	--- Expected
        	            	+++ Actual
        	            	@@ -1 +1 @@
        	            	-//./pipe/docker_engine
        	            	+/path/to/docker.sock
        	Test:       	TestExtractDockerSocketFromClient/Docker_socket_from_Testcontainers_host_takes_precedence_over_TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE
--- FAIL: TestExtractDockerSocketFromClient/Docker_socket_from_Testcontainers_host_takes_precedence_over_TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE (0.01s)
FAIL internal/testcontainersdocker.TestExtractDockerSocketFromClient/Docker_socket_from_Testcontainers_host_takes_precedence_over_TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE (0.01s)
PASS internal/testcontainersdocker.TestExtractDockerSocketFromClient/Docker_Socket_as_Testcontainers_environment_variable (0.01s)
=== RUN   TestExtractDockerSocketFromClient/Docker_Socket_as_Testcontainers_environment_variable,_removes_prefixes
    docker_host_test.go:311: 
        	Error Trace:	C:/actions-runner/_work/testcontainers-go/testcontainers-go/internal/testcontainersdocker/docker_host_test.go:311
        	Error:      	Not equal: 
        	            	expected: "/path/to/docker.sock"
        	            	actual  : "unix:///path/to/docker.sock"
        	            	
        	            	Diff:
        	            	--- Expected
        	            	+++ Actual
        	            	@@ -1 +1 @@
        	            	-/path/to/docker.sock
        	            	+unix:///path/to/docker.sock
        	Test:       	TestExtractDockerSocketFromClient/Docker_Socket_as_Testcontainers_environment_variable,_removes_prefixes
--- FAIL: TestExtractDockerSocketFromClient/Docker_Socket_as_Testcontainers_environment_variable,_removes_prefixes (0.01s)
FAIL internal/testcontainersdocker.TestExtractDockerSocketFromClient/Docker_Socket_as_Testcontainers_environment_variable,_removes_prefixes (0.01s)
PASS internal/testcontainersdocker.TestExtractDockerSocketFromClient/Unix_Docker_Socket_is_passed_as_DOCKER_HOST_variable_(Docker_Desktop) (0.01s)
=== RUN   TestExtractDockerSocketFromClient/Unix_Docker_Socket_is_passed_as_DOCKER_HOST_variable_(Not_Docker_Desktop)
    docker_host_test.go:343: 
        	Error Trace:	C:/actions-runner/_work/testcontainers-go/testcontainers-go/internal/testcontainersdocker/docker_host_test.go:343
        	Error:      	Not equal: 
        	            	expected: "/this/is/a/sample.sock"
        	            	actual  : "unix:///this/is/a/sample.sock"
        	            	
        	            	Diff:
        	            	--- Expected
        	            	+++ Actual
        	            	@@ -1 +1 @@
        	            	-/this/is/a/sample.sock
        	            	+unix:///this/is/a/sample.sock
        	Test:       	TestExtractDockerSocketFromClient/Unix_Docker_Socket_is_passed_as_DOCKER_HOST_variable_(Not_Docker_Desktop)
--- FAIL: TestExtractDockerSocketFromClient/Unix_Docker_Socket_is_passed_as_DOCKER_HOST_variable_(Not_Docker_Desktop) (0.01s)
FAIL internal/testcontainersdocker.TestExtractDockerSocketFromClient/Unix_Docker_Socket_is_passed_as_DOCKER_HOST_variable_(Not_Docker_Desktop) (0.01s)
=== RUN   TestExtractDockerSocketFromClient/Unix_Docker_Socket_is_passed_as_DOCKER_HOST_variable_(Not_Docker_Desktop),_removes_prefixes
    docker_host_test.go:356: 
        	Error Trace:	C:/actions-runner/_work/testcontainers-go/testcontainers-go/internal/testcontainersdocker/docker_host_test.go:356
        	Error:      	Not equal: 
        	            	expected: "/this/is/a/sample.sock"
        	            	actual  : "unix:///this/is/a/sample.sock"
        	            	
        	            	Diff:
        	            	--- Expected
        	            	+++ Actual
        	            	@@ -1 +1 @@
        	            	-/this/is/a/sample.sock
        	            	+unix:///this/is/a/sample.sock
        	Test:       	TestExtractDockerSocketFromClient/Unix_Docker_Socket_is_passed_as_DOCKER_HOST_variable_(Not_Docker_Desktop),_removes_prefixes
--- FAIL: TestExtractDockerSocketFromClient/Unix_Docker_Socket_is_passed_as_DOCKER_HOST_variable_(Not_Docker_Desktop),_removes_prefixes (0.00s)
FAIL internal/testcontainersdocker.TestExtractDockerSocketFromClient/Unix_Docker_Socket_is_passed_as_DOCKER_HOST_variable_(Not_Docker_Desktop),_removes_prefixes (0.00s)
=== RUN   TestExtractDockerSocketFromClient
--- FAIL: TestExtractDockerSocketFromClient (0.05s)
FAIL internal/testcontainersdocker.TestExtractDockerSocketFromClient (0.05s)
PASS internal/testcontainersdocker.TestInAContainer/file_does_not_exist (0.00s)
PASS internal/testcontainersdocker.TestInAContainer/file_exists (1.43s)
PASS internal/testcontainersdocker.TestInAContainer (1.43s)
PASS internal/testcontainersdocker.TestFileExists/testdata (0.00s)
PASS internal/testcontainersdocker.TestFileExists/docker_rootless.go (0.00s)
PASS internal/testcontainersdocker.TestFileExists/foobar.doc (0.00s)
PASS internal/testcontainersdocker.TestFileExists (0.00s)
PASS internal/testcontainersdocker.TestRootlessDockerSocketPath/Rootless_not_supported_on_Windows (0.00s)
=== RUN   TestRootlessDockerSocketPath/XDG_RUNTIME_DIR:_${XDG_RUNTIME_DIR}/docker.sock
    docker_rootless_test.go:77: 
        	Error Trace:	C:/actions-runner/_work/testcontainers-go/testcontainers-go/internal/testcontainersdocker/docker_rootless_test.go:77
        	Error:      	Expected nil, but got: &errors.errorString{s:"rootless Docker is not supported on Windows"}
        	Test:       	TestRootlessDockerSocketPath/XDG_RUNTIME_DIR:_${XDG_RUNTIME_DIR}/docker.sock
--- FAIL: TestRootlessDockerSocketPath/XDG_RUNTIME_DIR:_${XDG_RUNTIME_DIR}/docker.sock (0.01s)
FAIL internal/testcontainersdocker.TestRootlessDockerSocketPath/XDG_RUNTIME_DIR:_${XDG_RUNTIME_DIR}/docker.sock (0.01s)
=== RUN   TestRootlessDockerSocketPath/Home_run_dir:_~/.docker/run/docker.sock
    docker_rootless_test.go:92: 
        	Error Trace:	C:/actions-runner/_work/testcontainers-go/testcontainers-go/internal/testcontainersdocker/docker_rootless_test.go:92
        	Error:      	Expected nil, but got: &errors.errorString{s:"rootless Docker is not supported on Windows"}
        	Test:       	TestRootlessDockerSocketPath/Home_run_dir:_~/.docker/run/docker.sock
--- FAIL: TestRootlessDockerSocketPath/Home_run_dir:_~/.docker/run/docker.sock (0.01s)
FAIL internal/testcontainersdocker.TestRootlessDockerSocketPath/Home_run_dir:_~/.docker/run/docker.sock (0.01s)
=== RUN   TestRootlessDockerSocketPath/Home_desktop_dir:_~/.docker/desktop/docker.sock
    docker_rootless_test.go:107: 
        	Error Trace:	C:/actions-runner/_work/testcontainers-go/testcontainers-go/internal/testcontainersdocker/docker_rootless_test.go:107
        	Error:      	Expected nil, but got: &errors.errorString{s:"rootless Docker is not supported on Windows"}
        	Test:       	TestRootlessDockerSocketPath/Home_desktop_dir:_~/.docker/desktop/docker.sock
--- FAIL: TestRootlessDockerSocketPath/Home_desktop_dir:_~/.docker/desktop/docker.sock (0.01s)
FAIL internal/testcontainersdocker.TestRootlessDockerSocketPath/Home_desktop_dir:_~/.docker/desktop/docker.sock (0.01s)
=== RUN   TestRootlessDockerSocketPath/Run_dir:_/run/user/${uid}/docker.sock
    docker_rootless_test.go:132: 
        	Error Trace:	C:/actions-runner/_work/testcontainers-go/testcontainers-go/internal/testcontainersdocker/docker_rootless_test.go:132
        	Error:      	Expected nil, but got: &errors.errorString{s:"rootless Docker is not supported on Windows"}
        	Test:       	TestRootlessDockerSocketPath/Run_dir:_/run/user/${uid}/docker.sock
--- FAIL: TestRootlessDockerSocketPath/Run_dir:_/run/user/${uid}/docker.sock (0.01s)
FAIL internal/testcontainersdocker.TestRootlessDockerSocketPath/Run_dir:_/run/user/${uid}/docker.sock (0.01s)
=== RUN   TestRootlessDockerSocketPath/Rootless_not_found
    docker_rootless_test.go:140: 
        	Error Trace:	C:/actions-runner/_work/testcontainers-go/testcontainers-go/internal/testcontainersdocker/docker_rootless_test.go:140
        	Error:      	Target error should be in err chain:
        	            	expected: "rootless Docker not found"
        	            	in chain: "rootless Docker is not supported on Windows"
        	Test:       	TestRootlessDockerSocketPath/Rootless_not_found
    docker_rootless_test.go:144: 
        	Error Trace:	C:/actions-runner/_work/testcontainers-go/testcontainers-go/internal/testcontainersdocker/docker_rootless_test.go:144
        	Error:      	Error "rootless Docker is not supported on Windows" does not contain "checked path: $XDG_RUNTIME_DIR"
        	Test:       	TestRootlessDockerSocketPath/Rootless_not_found
    docker_rootless_test.go:145: 
        	Error Trace:	C:/actions-runner/_work/testcontainers-go/testcontainers-go/internal/testcontainersdocker/docker_rootless_test.go:145
        	Error:      	Error "rootless Docker is not supported on Windows" does not contain "checked path: ~/.docker/run/docker.sock"
        	Test:       	TestRootlessDockerSocketPath/Rootless_not_found
    docker_rootless_test.go:146: 
        	Error Trace:	C:/actions-runner/_work/testcontainers-go/testcontainers-go/internal/testcontainersdocker/docker_rootless_test.go:146
        	Error:      	Error "rootless Docker is not supported on Windows" does not contain "checked path: ~/.docker/desktop/docker.sock"
        	Test:       	TestRootlessDockerSocketPath/Rootless_not_found
    docker_rootless_test.go:147: 
        	Error Trace:	C:/actions-runner/_work/testcontainers-go/testcontainers-go/internal/testcontainersdocker/docker_rootless_test.go:147
        	Error:      	Error "rootless Docker is not supported on Windows" does not contain "checked path: /run/user/${uid}/docker.sock"
        	Test:       	TestRootlessDockerSocketPath/Rootless_not_found
--- FAIL: TestRootlessDockerSocketPath/Rootless_not_found (0.02s)
FAIL internal/testcontainersdocker.TestRootlessDockerSocketPath/Rootless_not_found (0.02s)
=== RUN   TestRootlessDockerSocketPath
--- FAIL: TestRootlessDockerSocketPath (0.06s)
FAIL internal/testcontainersdocker.TestRootlessDockerSocketPath (0.06s)

invalid mount config for type "bind"

FAIL wait.TestHTTPStrategyWaitUntilReady (0.20s)
=== RUN   TestHTTPStrategyWaitUntilReadyNoBasicAuth
2023/08/07 11:04:24 🐳 Creating container for image docker.io/testcontainers/ryuk:0.5.1
    http_test.go:233: Error response from daemon: invalid mount config for type "bind": bind source path does not exist: /pipe/docker_engine: creating reaper failed: failed to create container
--- FAIL: TestHTTPStrategyWaitUntilReadyNoBasicAuth (0.27s)
FAIL wait.TestHTTPStrategyWaitUntilReadyNoBasicAuth (0.27s)

I'll prioritise this bug over anything else.

@mdelapenya
Copy link
Collaborator

@turt2live could you put a break point in docker_host.go L:169, and check the state of the info variable?

// Because Docker Desktop runs in a VM, we need to use the default docker path for rootless docker
if info.OperatingSystem == "Docker Desktop" {
return DockerSocketPath
}

I wonder if, for Windows, we would need to enrich that evaluation 🤔 also verifying that in

we are making sure the / is prepended for Windows

@turt2live
Copy link

image

Looks like it's running as Linux because of WSL, which might be confusing things slightly. The named pipe exists in the windows OS, but might not fully translate to a "real" linux environment?

@mdelapenya
Copy link
Collaborator

Hey folks! I merged #1458 because I'm confident it fixes the library for Windows users. The key is https://github.com/testcontainers/testcontainers-go/pull/1458/files#diff-6063b4272c0c8023987dd0a86e67194c26ff5d12a21e45ef0c90685e0b35eff0R170-R173, where we want to force the Docker socket for Ryuk to be mounted on //var/run/docker.sock (Windows + Linux containers). I'd encourage you to test the library using the tip commit until we produce the next 0.23.0 release 🙏

For awareness, we added a Windows workflow on GH, using a self-hosted Windows instance running on Azure, and I have run the tests for that PR in there many many times, fixing multiple tests that were not using OS-agnostic patterns (please see PR description).

Because we are very careful with our cloud costs, we are not going to put this Windows workflow in front of the PRs we receive, but instead delegate to admins of the repo to manually post the /windows-test GH comment as a GH command in those PRs that need a check on Windows. So please let us know in the PR if we need a specific check on Windows.

We acknowledge that ideally any PR should be tested on Windows, but there are certain things that are more complex on Docker for Windows (please see the diff of that PR to see which tests we skipped for Windows and why (e.g. containers on multiple networks).

We sincerely hope you can use the library again.

Cheers! 👋

@turt2live
Copy link

Can confirm the fix is working on Windows, and I'm seeing the new log lines at startup:

2023/08/11 11:54:53 github.com/testcontainers/testcontainers-go - Connected to docker: 
  Server Version: 24.0.5
  API Version: 1.43
  Operating System: Docker Desktop
  Total Memory: 32069 MB
  Resolved Docker Host: npipe:////./pipe/docker_engine
  Resolved Docker Socket Path: //var/run/docker.sock

Thanks for taking a look at this so quickly!

turt2live added a commit to t2bot/matrix-media-repo that referenced this issue Aug 11, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug An issue with the library
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants