Java 将网桥网络上运行的Docker容器连接到本地主机

Java 将网桥网络上运行的Docker容器连接到本地主机,java,docker,localstack,Java,Docker,Localstack,我正在本地运行localstack(AWS模拟服务)作为docker容器。我有另一个应用程序,它试图连接到它,但被拒绝连接错误都是java项目。我尝试使用的网络名为serview,因此我使用以下命令运行localstack docker run --net=serview -d -p 4566-4597:4566-4597 --name=localstack -it localstack/localstack:latest 然后我运行我的另一个应用程序,它也希望像这样访问它 docker ru

我正在本地运行localstack(AWS模拟服务)作为docker容器。我有另一个应用程序,它试图连接到它,但被拒绝连接错误都是java项目。我尝试使用的网络名为serview,因此我使用以下命令运行localstack

docker run --net=serview -d -p 4566-4597:4566-4597 --name=localstack -it localstack/localstack:latest
然后我运行我的另一个应用程序,它也希望像这样访问它

docker run --net=serview  -it --name sample-publisher -p 1338:1338 --rm sample-publisher:latest
我得到的错误是

com.amazonaws.SdkClientException: Unable to execute HTTP request: Connect to localhost:4575 [localhost/127.0.0.1] failed: Connection refused (Connection refused)

使用net=host运行会很好,但我想在服务网络上运行这可能吗?

当容器连接到公共网络时,应使用容器名称彼此连接。容器名称是将通过公共网络解析为容器IP的DNS名称。

使用容器名称从另一个容器访问它。现在您正在使用localhost。这起作用了,作为回答,我将接受。我还有一个问题,也许您可以帮助解决,如果我使用容器名称而不是localhost,但我删除了--net=serview,那么我会得到连接错误,我有一种情况,我希望容器在服务视图中,并且没有指定网络能够针对我的localstack运行抱歉可能会解释错误,但我希望java代码中的某些内容能够工作,无论localstack是在网桥网络上运行,还是在没有指定网络的情况下运行。这样的事情已经完成通过环境变量。您可以在java代码中从环境中选择值。启动容器时,您将传递此环境变量,该变量将被选取(localhost或其他容器名称)。如果我在未指定网络的情况下运行docker容器,为什么容器名称不起作用?我不确定您的意思。当容器未连接到用户定义的网络时,它们将连接到默认的Beige网络。您可以通过IP相互访问,但不能通过名称访问。当容器连接到用户定义的网络(如您的示例中)时,它们可以通过原始IP或容器名称进行通信,这些名称将是解析为其IP的DNS名称。您可以在中找到更多信息