LocalStack签名URL端点问题:LOCALSTACK_HOST环境变量未按预期生效
问题描述
我们正尝试配置LocalStack,让它返回的签名URL使用预设的localhost:4566,而非Docker Compose网络内的localstack:4566。因为本地React测试客户端无法解析localstack:4566这个网络主机名。
原本以为设置LOCALSTACK_HOST环境变量就能解决——该变量默认值是localhost.localstack.cloud:4566,按文档说明会被插入到LocalStack返回的URL和地址中,但实际配置后并没有生效。
当前Docker Compose配置
version: "3.5" services: localstack: image: localstack/localstack:2.1.0 ports: - 4566:4566 # LocalStack Gateway - 4510-4559:4510-4559 # external services port range environment: - SERVICES=s3 - DEBUG=1 - LOCALSTACK_HOST=localhost:4566 networks: - devnet volumes: - localstack:/var/lib/localstack - ./scripts/localstack/ready.d:/etc/localstack/init/ready.d
当前返回的URL示例
通过devnet网络访问LocalStack时,得到的签名URL如下:
http://localstack:4566/dev-upload-bucket/uploads/e9530040-5bac-48b4-8768-2aff1919e483/hello?partNumber=1&uploadId=eDOCkjtyyQw4dCH8GhgG0wSlVA12ZOAwXxXE4Iqn75WGl844NJgJZNg&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIAYA3ELKN4FI62BMFI%2F20230725%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20230725T211351Z&X-Amz-Expires=3600&X-Amz-Security-Token=FwoGZXIvYXdzENn%2F%2F%2F%2F%2F%2F%2F%2F...
解决方案
针对LocalStack 2.x版本,LOCALSTACK_HOST变量已不再控制返回URL中的主机名,需改用以下两个环境变量组合配置:
LOCALSTACK_HOSTNAME: 设置LocalStack在Docker网络内部使用的主机名(保持为localstack即可,确保网络内服务能正常访问)HOSTNAME_EXTERNAL: 指定LocalStack对外暴露的地址,也就是生成签名URL时返回给客户端的主机名和端口
修改后的Docker Compose环境变量部分如下:
environment: - SERVICES=s3 - DEBUG=1 - LOCALSTACK_HOSTNAME=localstack - HOSTNAME_EXTERNAL=localhost:4566
配置后,LocalStack生成的签名URL会自动替换为localhost:4566,本地React客户端就能正常解析并访问了。
内容的提问来源于stack exchange,提问作者user2403018
相关产品推荐
相关产品推荐

