MacOS下Docker容器如何访问同test-network的LocalStack服务
问题原因
你在Docker容器内使用http://localhost:4566访问LocalStack时,localhost指向的是当前容器自身的回环地址,而非宿主机或同网络下的LocalStack容器,因此触发连接报错。宿主机侧访问正常是因为LocalStack启动时已经将4566端口映射到了宿主机的本地端口。
解决方案
- 步骤1:确认LocalStack容器已加入
test-network网络
先执行docker ps获取LocalStack的容器名称(默认通常为localstack_main),执行以下命令确认网络归属:
如果未加入docker inspect <替换为LocalStack容器名> | grep Networkstest-network,执行以下命令将其加入对应网络:docker network connect test-network <替换为LocalStack容器名> - 步骤2:修改容器内的访问地址
Docker内置DNS会自动解析同网络下的容器名,你只需要将endpoint-url中的localhost替换为LocalStack的容器名即可,示例命令:aws --endpoint-url=http://<替换为LocalStack容器名>:4566 dynamodb list-tables - 可选优化方案
如果你希望使用固定名称访问,可以在启动LocalStack时指定网络别名:
之后同网络下的所有容器都可以通过docker run --network test-network --network-alias localstack -p 4566:4566 localstack/localstackhttp://localstack:4566访问LocalStack服务。
如果你使用docker-compose编排服务,只需要将LocalStack和你的业务服务都配置在同一个networks下,直接用LocalStack的服务名作为域名访问即可,无需额外配置。 - 特殊场景补充
如果你需要通过宿主机IP访问,首先要确保LocalStack启动时的端口映射是-p 4566:4566(而非绑定127.0.0.1的-p 127.0.0.1:4566:4566),再执行docker network inspect test-network | grep Gateway获取宿主机在该网络下的网关IP,替换endpoint中的localhost即可。
内容的提问来源于stack exchange,提问作者Daptal Ms
相关产品推荐
相关产品推荐

