@@ -50,34 +50,20 @@ defmodule Testcontainers do
5050 defp setup ( options ) do
5151 { conn , docker_host_url , docker_host } = Connection . get_connection ( options )
5252
53- # Read properties first so we can configure Ryuk appropriately
53+ # Read testcontainer properties
5454 { :ok , properties } = PropertiesParser . read_property_sources ( )
5555
5656 session_id =
5757 :crypto . hash ( :sha , "#{ inspect ( self ( ) ) } #{ DateTime . utc_now ( ) |> DateTime . to_string ( ) } " )
5858 |> Base . encode16 ( )
5959
60- ryuk_privileged = Map . get ( properties , "ryuk.container.privileged" , "false" ) == "true"
61-
62- ryuk_config =
63- Container . new ( "testcontainers/ryuk:#{ Constants . ryuk_version ( ) } " )
64- |> Container . with_exposed_port ( 8080 )
65- |> then ( & apply_docker_socket_volume_binding ( & 1 , docker_host ) )
66- |> Container . with_auto_remove ( true )
67- |> Container . with_privileged ( ryuk_privileged )
68-
69- with { :ok , _ } <- Api . pull_image ( ryuk_config . image , conn ) ,
70- { :ok , docker_hostname } <- get_docker_hostname ( docker_host_url , conn ) ,
71- { :ok , ryuk_container_id } <- Api . create_container ( ryuk_config , conn ) ,
72- :ok <- Api . start_container ( ryuk_container_id , conn ) ,
73- { :ok , container } <- Api . get_container ( ryuk_container_id , conn ) ,
74- { :ok , socket } <- create_ryuk_socket ( container , docker_hostname ) ,
75- :ok <- register_ryuk_filter ( session_id , socket ) do
60+ with { :ok , docker_hostname } <- get_docker_hostname ( docker_host_url , conn ) ,
61+ { :ok } <- start_reaper ( conn , session_id , properties , docker_host , docker_hostname ) ,
62+ { :ok , properties } <- PropertiesParser . read_property_file ( ) do
7663 Logger . info ( "Testcontainers initialized" )
7764
7865 { :ok ,
7966 % {
80- socket: socket ,
8167 conn: conn ,
8268 docker_hostname: docker_hostname ,
8369 session_id: session_id ,
@@ -258,6 +244,47 @@ defmodule Testcontainers do
258244 GenServer . call ( name , call , @ timeout )
259245 end
260246
247+ defp start_reaper ( conn , session_id , properties , docker_host , docker_hostname ) do
248+ ryuk_disabled = Map . get ( properties , "ryuk.disabled" , "false" ) == "true"
249+
250+ case ryuk_disabled do
251+ true ->
252+ ryukDisabledMessage =
253+ """
254+ ********************************************************************************
255+ Ryuk has been disabled. This can cause unexpected behavior in your environment.
256+ ********************************************************************************
257+ """
258+
259+ IO . puts ( ryukDisabledMessage )
260+
261+ { :ok , nil }
262+
263+ _ ->
264+ start_ryuk ( conn , session_id , properties , docker_host , docker_hostname )
265+ end
266+ end
267+
268+ defp start_ryuk ( conn , session_id , properties , docker_host , docker_hostname ) do
269+ ryuk_privileged = Map . get ( properties , "ryuk.container.privileged" , "false" ) == "true"
270+
271+ ryuk_config =
272+ Container . new ( "testcontainers/ryuk:#{ Constants . ryuk_version ( ) } " )
273+ |> Container . with_exposed_port ( 8080 )
274+ |> then ( & apply_docker_socket_volume_binding ( & 1 , docker_host ) )
275+ |> Container . with_auto_remove ( true )
276+ |> Container . with_privileged ( ryuk_privileged )
277+
278+ with { :ok , _ } <- Api . pull_image ( ryuk_config . image , conn ) ,
279+ { :ok , ryuk_container_id } <- Api . create_container ( ryuk_config , conn ) ,
280+ :ok <- Api . start_container ( ryuk_container_id , conn ) ,
281+ { :ok , container } <- Api . get_container ( ryuk_container_id , conn ) ,
282+ { :ok , socket } <- create_ryuk_socket ( container , docker_hostname ) ,
283+ :ok <- register_ryuk_filter ( session_id , socket ) do
284+ { :ok }
285+ end
286+ end
287+
261288 defp create_ryuk_socket ( container , docker_hostname , reattempt_count \\ 0 )
262289
263290 defp create_ryuk_socket ( % Container { } = container , docker_hostname , reattempt_count )
0 commit comments