问题描述
我有两个作为docker-compose文件一部分运行的docker容器,ContainerA是localstack,我在其中运行一个lambda函数,该函数试图使用以下简化代码向ContainerB发出HTTP POST请求:>
var content = new StringContent("{ "content": "sample" }",Encoding.UTF8,"application/json");
var httpClient = new HttpClient();
var response = await HttpClient.PostAsync("http://ContainerB/Foo",content);
哪个引发以下异常:
如果我从Container A的控制台发出相同的请求,则该请求成功,例如
curl http://ContainerB/Foo -H "Content-Type: application/json" -d "{ "content": "sample" }"
随着该请求从控制台成功执行,我非常有信心这不是我的Docker容器之间的网络问题。
解决方法
每次执行时,都会在新的Docker容器中创建Localstack lambda,该Continant位于docker-compose堆栈之外,因此不属于docker-compose默认网络。有关更多信息,请参见this GitHub问题。
要解决此问题,必须首先在docker中创建一个外部桥接网络:
docker network create -d bridge MyNetwork
然后在docker compose文件中将每个docker容器连接到该容器,并将其注册为外部网络:
services:
localstack:
networks:
- MyNetwork
...
...
networks:
MyNetwork:
external: true