我正试图通过docker compose设置单元测试运行时。当我试图通过docker compose节点运行npm脚本时,它的行为就像在路径上找不到模块一样:
â docker-compose run --rm server npm run test
Starting redis ... done
Starting mongodb ... done
> evolved@1.0.0 test /server
> mocha --recursive tests
sh: mocha: not found
npm ERR! file sh
npm ERR! code ELIFECYCLE
npm ERR! errno ENOENT
npm ERR! syscall spawn
npm ERR! evolved@1.0.0 test: `mocha --recursive tests`
npm ERR! spawn ENOENT
我已经确认文件正在装载到容器中,为什么节点找不到它们?
â dc run --rm --service-ports server ls node_modules/.bin | grep "mocha"
Starting redis ... done
_mocha mocha
我的剧本
package.json
这些都是非常基本的:
"test": "mocha --recursive tests",
"build": "gulp default:dev",
docker撰写。yml
version: '3' #compose version
services:
server:
build:
context: .
dockerfile: Dockerfile.test
ports:
- "3000:3000"
volumes:
- ".:/server"
working_dir: "/server"
depends_on:
- mongodb
- redis
environment:
PORT: 3000
NODE_ENV: test
mongodb:
image: mongo:latest
container_name: "mongodb"
environment:
- MONGO_DATA_DIR=/data/db
- MONGO_LOG_DIR=/dev/null
volumes:
- ./localdata/db:/data/db
ports:
- 27017:27017
command: mongod --smallfiles --logpath=/dev/null # --quiet
redis:
container_name: redis
command: redis-server --requirepass testredispassword
image: redis
ports:
- "6379:6379"
volumes:
- ./localdata/redis:/data
entrypoint: redis-server --appendonly yes
restart: always
Dockerfile。test与prod dockerfile的不同之处在于,它不安装/构建应用程序的前端,也不传递任何版本控制信息。我正试图通过为服务器运行单元测试所需的东西来加快构建速度:
FROM node:8-alpine
RUN apk update \
&& apk --update --no-cache add \
git \
python \
build-base
ADD ./ /server WORKDIR /server
RUN rm -rf node_modules && npm install && npm run build
我觉得这一切都很简单,我以前也做过类似的设置,但在Mac的Docker上。这次我运行Docker For Windows并通过WSL运行命令。我已将驱动器共享并绑定到/mnt/c到/c。
另作参考
this project
我可以在Docker for Mac上运行单元测试,但得到相同的结果
sh: mocha: not found
通过连接到Windows 10上Docker for Windows的WSL运行时。这似乎只是通往二进制文件的途径
node_modules/.bin
这是没有找到的,因为我可以启动项目没有任何错误,它只是找不到任何二进制文件,如摩卡,nsp,gulp等。。。