Packages
testcontainers
2.3.1
2.3.1
2.3.0
2.2.0
2.1.0
2.1.0-rc1
2.0.0
2.0.0-rc3
2.0.0-rc2
2.0.0-rc
1.14.1
1.14.0
1.13.5
1.13.4
1.13.3
1.13.2
1.13.1
1.13.0
1.12.0
1.11.8
1.11.7
1.11.6
1.11.5
1.11.4
1.11.3
1.11.2
1.11.1
1.11.0
1.10.5
1.10.4
1.10.3
1.10.2
1.10.1
1.10.0
1.9.0
1.8.4
1.8.3
1.8.2
1.8.1
1.8.0
1.7.0
1.6.0
1.5.1
1.5.0
1.4.2
1.4.1
1.4.0
1.3.1
1.3.0
1.2.11
1.2.10
1.2.9
1.2.8
1.2.7
1.2.6
1.2.5
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.1.3
1.1.2
1.1.1
1.1.0
1.0.1
1.0.0
1.0.0-beta.1
1.0.0-beta
0.9.3
0.9.2
0.9.1
0.9.0
Testcontainers is an Elixir library that supports ExUnit tests, providing lightweight, throwaway instances of common databases, Selenium web browsers, or anything else that can run in a Docker container.
Current section
Files
Jump to
Current section
Files
lib/connection/docker_host_strategy/docker_socket_path.ex
# SPDX-License-Identifier: MIT
defmodule Testcontainers.DockerSocketPathStrategy do
@moduledoc false
require Logger
defstruct socket_paths: []
defimpl Testcontainers.DockerHostStrategy do
alias Testcontainers.DockerUrl
defp default_socket_paths do
[
"/var/run/docker.sock",
Path.expand("~/.docker/run/docker.sock"),
Path.expand("~/.docker/desktop/docker.sock")
] ++
case System.get_env("XDG_RUNTIME_DIR") do
nil ->
[]
path ->
[
"#{path}/podman/podman.sock",
"#{path}/docker.sock"
]
end
end
def execute(strategy, _input) do
paths =
case strategy.socket_paths do
[] -> default_socket_paths()
paths -> paths
end
Enum.reduce_while(paths, {:error, {:docker_socket_not_found, []}}, &try_socket_path/2)
end
defp try_socket_path(path, {:error, {:docker_socket_not_found, tried_paths}}) do
if path != nil && File.exists?(path) do
probe_socket(path, tried_paths)
else
{:cont, {:error, {:docker_socket_not_found, tried_paths ++ [path]}}}
end
end
defp probe_socket(path, tried_paths) do
path_with_scheme = "unix://" <> path
case DockerUrl.test_docker_host(path_with_scheme) do
:ok ->
{:halt, {:ok, path_with_scheme}}
{:error, reason} ->
Logger.debug("Docker socket path #{path} failed: #{reason}")
{:cont, {:error, {:docker_socket_not_found, tried_paths ++ [path]}}}
end
end
end
end