diff --git a/hw-polysemy.cabal b/hw-polysemy.cabal
--- a/hw-polysemy.cabal
+++ b/hw-polysemy.cabal
@@ -1,6 +1,6 @@
 cabal-version:          3.4
 name:                   hw-polysemy
-version:                0.2.12.0
+version:                0.2.13.0
 synopsis:               Opinionated polysemy library
 description:            Opinionated polysemy library.
 license:                Apache-2.0
@@ -220,6 +220,7 @@
 
 library testcontainers-localstack
   import:               base, project-config,
+                        aeson,
                         amazonka,
                         bytestring,
                         generic-lens,
@@ -233,6 +234,7 @@
                         testcontainers,
                         text,
                         time,
+                        yaml,
   visibility:           public
   exposed-modules:      HaskellWorks.Polysemy.Amazonka.LocalStack
                         HaskellWorks.TestContainers.LocalStack
diff --git a/test/HaskellWorks/Polysemy/TestContainers/LocalStackSpec.hs b/test/HaskellWorks/Polysemy/TestContainers/LocalStackSpec.hs
--- a/test/HaskellWorks/Polysemy/TestContainers/LocalStackSpec.hs
+++ b/test/HaskellWorks/Polysemy/TestContainers/LocalStackSpec.hs
@@ -11,23 +11,26 @@
 
 import           HaskellWorks.TestContainers.LocalStack
 import           Test.Polysemy.Env
-import qualified Test.Tasty                             as Tasty
-import qualified Test.Tasty.Hedgehog                    as H
+import qualified Test.Tasty                                as Tasty
+import qualified Test.Tasty.Hedgehog                       as H
 
-import qualified Amazonka.S3                            as AWS
+import qualified Amazonka.S3                               as AWS
 import           HaskellWorks.Polysemy.Amazonka
+import           HaskellWorks.Polysemy.Amazonka.LocalStack
 import           HaskellWorks.Polysemy.Hedgehog
 import           HaskellWorks.Prelude
 import           Polysemy
-import qualified TestContainers.Tasty                   as TC
+import qualified TestContainers.Tasty                      as TC
 
 {- HLINT ignore "Use camelCase" -}
 
 tasty_local_stack :: Tasty.TestTree
 tasty_local_stack =
-  TC.withContainers setupContainers $ \start ->
-    H.testProperty "Local stack test" $ propertyOnce $ runLocalTestEnv start $ do
-      ep <- embed start
+  TC.withContainers setupContainers $ \getContainer ->
+    H.testProperty "Local stack test" $ propertyOnce $ runLocalTestEnv getContainer $ do
+      container <- embed getContainer
+      ep <- getLocalStackEndpoint container
+      jotYamlM_ $ inspectContainer container
       jotShow_ ep
       listBucketsReq <- pure AWS.newListBuckets
 
diff --git a/test/Test/Polysemy/Env.hs b/test/Test/Polysemy/Env.hs
--- a/test/Test/Polysemy/Env.hs
+++ b/test/Test/Polysemy/Env.hs
@@ -23,10 +23,10 @@
 import           HaskellWorks.Polysemy.Hedgehog
 import           HaskellWorks.Polysemy.System.Environment
 import           HaskellWorks.Prelude
-import           HaskellWorks.TestContainers.LocalStack
 import           Polysemy
 import           Polysemy.Error
 import           Polysemy.Reader
+import qualified TestContainers.Tasty                      as TC
 
 newtype EnvironmentVariableMissing =
   EnvironmentVariableMissing String
@@ -49,7 +49,7 @@
   => HasCallStack
   => Member (Embed IO) r
   => Member Hedgehog r
-  => IO LocalStackEndpoint
+  => IO TC.Container
   -> Sem
         ( Reader AWS.Env
         : r)
diff --git a/testcontainers-localstack/HaskellWorks/Polysemy/Amazonka/LocalStack.hs b/testcontainers-localstack/HaskellWorks/Polysemy/Amazonka/LocalStack.hs
--- a/testcontainers-localstack/HaskellWorks/Polysemy/Amazonka/LocalStack.hs
+++ b/testcontainers-localstack/HaskellWorks/Polysemy/Amazonka/LocalStack.hs
@@ -2,25 +2,32 @@
 
 module HaskellWorks.Polysemy.Amazonka.LocalStack
   ( runReaderLocalAwsEnvDiscover
+  , getLocalStackEndpoint
+  , inspectContainer
   ) where
 
-import qualified Amazonka                               as AWS
-import qualified Amazonka.Auth                          as AWS
-import           Control.Lens                           ((%~), (.~), (^.))
+import qualified Amazonka                                     as AWS
+import qualified Amazonka.Auth                                as AWS
+import           Control.Lens                                 ((%~), (.~), (^.))
+import qualified Data.Aeson                                   as J
 import           Data.Generics.Product.Any
 import           HaskellWorks.Prelude
 import           HaskellWorks.TestContainers.LocalStack
+import qualified HaskellWorks.TestContainers.LocalStack.Types as Z
 import           Polysemy
 import           Polysemy.Reader
-import qualified System.IO                              as IO
+import qualified System.IO                                    as IO
+import qualified TestContainers.Monad                         as TC
+import qualified TestContainers.Tasty                         as TC
 
 runReaderLocalAwsEnvDiscover :: ()
   => Member (Embed IO) r
-  => IO LocalStackEndpoint
+  => IO TC.Container
   -> Sem (Reader AWS.Env : r) a
   -> Sem r a
 runReaderLocalAwsEnvDiscover mk f = do
-  ep <- embed mk
+  container <- embed mk
+  ep <- getLocalStackEndpoint container
 
   logger' <- embed $ AWS.newLogger AWS.Debug IO.stdout
 
@@ -34,3 +41,21 @@
       & the @"overrides" %~ (. AWS.setEndpoint False "localhost" (ep ^. the @"port"))
 
   runReader awsEnv f
+
+getLocalStackEndpoint :: ()
+  => TC.Container
+  -> Sem r LocalStackEndpoint
+getLocalStackEndpoint container = do
+  let localStackPort = TC.containerPort container 4566
+
+  pure Z.LocalStackEndpoint
+    { Z.host = "0.0.0.0"
+    , Z.port = localStackPort
+    }
+
+inspectContainer :: ()
+  => Member (Embed IO) r
+  => TC.Container
+  -> Sem r J.Value
+inspectContainer container =
+  embed $ TC.runTestContainer TC.defaultDockerConfig $ TC.inspect container
diff --git a/testcontainers-localstack/HaskellWorks/TestContainers/LocalStack.hs b/testcontainers-localstack/HaskellWorks/TestContainers/LocalStack.hs
--- a/testcontainers-localstack/HaskellWorks/TestContainers/LocalStack.hs
+++ b/testcontainers-localstack/HaskellWorks/TestContainers/LocalStack.hs
@@ -1,10 +1,13 @@
 {-# LANGUAGE GADTs             #-}
+{-# LANGUAGE NamedFieldPuns    #-}
 {-# LANGUAGE OverloadedStrings #-}
 
+
 {- HLINT ignore "Use camelCase" -}
 
 module HaskellWorks.TestContainers.LocalStack
   ( LocalStackEndpoint(..)
+  , TC.Container
   , setupContainers
   , waitForLocalStack
   ) where
@@ -15,19 +18,22 @@
 import           Control.Exception                            (try)
 import           Control.Monad                                (when)
 import           Control.Monad.IO.Class
+import qualified Data.ByteString                              as BS
 import qualified Data.ByteString.Lazy                         as LBS
 import           Data.Function
 import qualified Data.Text                                    as T
 import           Data.Time.Clock.POSIX                        (getPOSIXTime)
+import qualified Data.Yaml                                    as Y
 import           HaskellWorks.TestContainers.LocalStack.Types (LocalStackEndpoint (LocalStackEndpoint))
-import qualified HaskellWorks.TestContainers.LocalStack.Types as Z
 import           Network.HTTP.Conduit                         (HttpException,
                                                                simpleHttp)
 import qualified System.Environment                           as IO
+import qualified System.IO                                    as IO
+import qualified TestContainers.Monad                         as TC
 import qualified TestContainers.Tasty                         as TC
 
 -- | Sets up and runs the containers required for this test suite.
-setupContainers :: TC.MonadDocker m => m LocalStackEndpoint
+setupContainers :: TC.MonadDocker m => m TC.Container
 setupContainers = do
   authToken <- liftIO $ IO.lookupEnv "LOCALSTACK_AUTH_TOKEN"
   -- Launch the container based on the postgres image.
@@ -38,22 +44,22 @@
     & TC.setExpose
         ( mconcat
             [ [ 4566 ]
-            , fmap fromInteger [4510 .. 4559]
             ]
         )
     -- Wait until the container is ready to accept requests. `run` blocks until
     -- readiness can be established.
     & TC.setWaitingFor (TC.waitUntilMappedPortReachable 4566)
 
+  json <- liftIO $ TC.runTestContainer TC.defaultDockerConfig $ TC.inspect localstackContainer
+
+  liftIO $ BS.hPut IO.stdout $ "Local stack container: " <> Y.encode json
+
   -- Look up the corresponding port on the host machine for the exposed port 4566.
   let localStackPort = TC.containerPort localstackContainer 4566
 
   liftIO $ waitForLocalStack "localhost" localStackPort 8
 
-  pure $ LocalStackEndpoint
-    { Z.host = "0.0.0.0"
-    , Z.port = localStackPort
-    }
+  pure localstackContainer
 
 waitForLocalStack :: String -> Int -> Int -> IO ()
 waitForLocalStack host port timeout = do
