Docker Compose中无法通过容器名称调用strap-app容器问题
问题:Docker容器间通过容器名调用Angular服务返回"Invalid Host"
环境配置
Docker Compose 配置
version: "3.8" services: api: build: strap_api container_name: strap-api ports: - "8080:80" env_file: .env volumes: - ./backend:/var/www working_dir: /var/www app: build: strap_app container_name: strap-app volumes: - ./frontend:/app/ - '/app/node_modules' - '/app/dist' ports: - 4200:4200
容器运行状态
执行docker ps输出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 57e172278f5a strap_image_app "docker-entrypoint.s…" 6 minutes ago Up 6 minutes 0.0.0.0:4200->4200/tcp, :::4200->4200/tcp strap-app a9b4011af970 strap_image_api "docker-php-entrypoi…" 6 minutes ago Up 6 minutes 0.0.0.0:8080->80/tcp, :::8080->80/tcp strap-api
问题现象
- 直接请求
strap-api可正常响应; - 请求
strap-app时始终返回**"Invalid Host"**,仅通过IP地址调用才能正常响应; - 进入
strap-api容器执行curl http://strap-app:4200,结果仍为**"Invalid Host"**; strap-app可通过http://strap-api正常请求strap-api。
原因及解决方案
核心原因
Angular开发服务器(ng serve)默认启用主机名校验,只有配置在允许列表内的主机名才能正常访问。通过容器名strap-app访问时,该主机名不在Angular的允许主机列表中,因此返回"Invalid Host"错误。
解决步骤
修改Angular启动命令:在
strap_app的Dockerfile或启动脚本中,给ng serve添加对应参数:- 开发环境临时禁用校验:
ng serve --host 0.0.0.0 --disable-host-check - 指定允许的主机名(更安全):
ng serve --host 0.0.0.0 --allowed-hosts strap-app --allowed-hosts localhost
注:
--host 0.0.0.0用于让Angular服务监听容器内所有网卡,否则仅能通过localhost访问容器内部服务。- 开发环境临时禁用校验:
重新构建启动容器:
docker-compose down && docker-compose up --build验证:进入
strap-api容器再次执行curl http://strap-app:4200,即可正常响应。
内容的提问来源于stack exchange,提问作者Klick
相关产品推荐
相关产品推荐

