From e3ebc5348bba7a360c4d7b630af82cb9f851d776 Mon Sep 17 00:00:00 2001 From: Pedro Piza Date: Tue, 6 May 2025 22:00:53 -0500 Subject: [PATCH] [Feature] Add support for TC.host using JavaProperties --- Gemfile.lock | 2 ++ core/Gemfile.lock | 2 ++ core/lib/testcontainers/docker_container.rb | 16 +++++++++++++++- core/testcontainers-core.gemspec | 1 + 4 files changed, 20 insertions(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 114f94c..26daad8 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -15,6 +15,7 @@ PATH specs: testcontainers-core (0.2.0) docker-api (~> 2.2) + java-properties (~> 0.3.0) PATH remote: elasticsearch @@ -104,6 +105,7 @@ GEM ruby2_keywords (>= 0.0.4) faraday-net_http (3.0.2) ffi (1.15.5) + java-properties (0.3.0) json (2.6.3) language_server-protocol (3.17.0.3) lint_roller (1.0.0) diff --git a/core/Gemfile.lock b/core/Gemfile.lock index 585d516..18d67af 100644 --- a/core/Gemfile.lock +++ b/core/Gemfile.lock @@ -3,6 +3,7 @@ PATH specs: testcontainers-core (0.2.0) docker-api (~> 2.2) + java-properties (~> 0.3.0) GEM remote: https://rubygems.org/ @@ -12,6 +13,7 @@ GEM excon (>= 0.47.0) multi_json excon (0.99.0) + java-properties (0.3.0) json (2.6.3) language_server-protocol (3.17.0.3) lint_roller (1.0.0) diff --git a/core/lib/testcontainers/docker_container.rb b/core/lib/testcontainers/docker_container.rb index 162d925..a868025 100644 --- a/core/lib/testcontainers/docker_container.rb +++ b/core/lib/testcontainers/docker_container.rb @@ -1,3 +1,5 @@ +require "java-properties" + module Testcontainers # The DockerContainer class is used to manage Docker containers. # It provides an interface to create, start, stop, and manipulate containers @@ -472,7 +474,19 @@ def use # @raise [ConnectionError] If the connection to the Docker daemon fails. # @raise [NotFoundError] If Docker is unable to find the image. def start - Docker::Image.create({"fromImage" => @image}.merge(@image_create_options)) + expanded_path = File.expand_path("~/.testcontainers.properties") + + properties = File.exist?(expanded_path) ? JavaProperties.load(expanded_path) : {} + + tc_host = ENV["TESTCONTAINERS_HOST"] || properties[:"tc.host"] + + if tc_host && !tc_host.empty? + Docker.url = tc_host + end + + connection = Docker::Connection.new(Docker.url, Docker.options) + + Docker::Image.create({"fromImage" => @image}.merge(@image_create_options), connection) @_container ||= Docker::Container.create(_container_create_options) @_container.start diff --git a/core/testcontainers-core.gemspec b/core/testcontainers-core.gemspec index db633c2..7ee45a4 100644 --- a/core/testcontainers-core.gemspec +++ b/core/testcontainers-core.gemspec @@ -31,6 +31,7 @@ Gem::Specification.new do |spec| # Uncomment to register a new dependency of your gem spec.add_dependency "docker-api", "~> 2.2" + spec.add_dependency "java-properties", "~> 0.3.0" spec.add_development_dependency "rake", "~> 13.0" spec.add_development_dependency "minitest", "~> 5.0"