Я пытаюсь настроить время выполнения модульного теста через docker compose. Когда я пытаюсь запустить скрипт npm через docker-compose, узел работает так, как будто не может найти модули по пути:
➜ 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
Я подтвердил, что файлы монтируются в контейнер, так почему же Node не может их найти?
➜ 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",
докер-compose.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
Я думаю, что все довольно просто, и я уже делал подобные настройки, но на Docker для Mac. На этот раз я запускаю Docker For Windows и запускаю команды через WSL. У меня есть общие диски и привязаны / mnt / c к /c.
Для другой ссылки этот проект Я могу запустить модульные тесты в Docker для Mac, но получить тот же sh: mocha: not found
при запуске через WSL, подключенный к Docker для Windows в Windows 10. Кажется, это просто путь к двоичным файлам node_modules/.bin
, который не найден, потому что я могу запустить проект без каких-либо ошибок, он просто не может найти какие-либо двоичные файлы, такие как mocha, nsp, gulp и т.д ...