Docker Compose中如何让artisan服务访问node环境?
解决Docker中Laravel Artisan调用Node.js失败的问题
你的问题核心是artisan服务基于PHP镜像构建,镜像内未安装Node.js环境,所以执行inertia:start-ssr这类需要调用node的命令时会报错。下面给你两个实用的解决方法:
方法一:给PHP镜像添加Node.js环境
因为artisan服务和php服务共用同一个Dockerfile(php.dockerfile),直接在这个文件里添加Node.js的安装步骤即可:
1. 修改dockerfiles/php.dockerfile
根据你的PHP镜像基础系统,添加对应安装命令:
- 如果是Alpine系统(常见于轻量PHP镜像):
# 在合适位置添加Node.js安装命令 RUN apk add --no-cache nodejs npm
- 如果是Debian/Ubuntu系统:
# 在合适位置添加Node.js安装命令 RUN apt-get update && apt-get install -y nodejs npm && rm -rf /var/lib/apt/lists/*
2. 重新构建镜像并运行命令
执行以下命令更新镜像:
docker compose build php artisan
之后再运行你的SSR命令就正常了:
docker compose run --rm artisan inertia:start-ssr
方法二:单独创建SSR服务(推荐)
Inertia的SSR本质是通过Node.js运行脚本,没必要通过Artisan中转。直接在docker-compose.yml里新增一个专门的SSR服务:
services: # ... 保留原有其他服务 ... ssr: image: node:current-alpine volumes: - ./src:/var/www/html working_dir: /var/www/html command: node bootstrap/ssr/ssr.mjs networks: - laravel depends_on: - php
然后启动SSR服务:
docker compose up -d ssr
这个方法更符合Docker"单服务单职责"的设计原则,也避免了给PHP镜像额外安装Node.js的冗余。
内容的提问来源于stack exchange,提问作者mamady
相关产品推荐
相关产品推荐

