Путь к узлу WSL не найден? Объем, кажется, установлен - PullRequest
0 голосов
/ 26 июня 2018

Я пытаюсь настроить время выполнения модульного теста через 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 и т.д ...

1 Ответ

0 голосов
/ 18 июля 2018

Похоже, что это похоже на проблему с путями, с которыми я столкнулся в среде windows / wsl. Попробуйте изменить определение тома на полный путь и посмотреть, решит ли это его.

volumes:
 - /c/Users/username/Code/server:/server

Даже если вы скопировали файлы в контейнер с помощью Dockerfile, при монтировании тома с помощью docker-compose это на самом деле не волнует. Вы существенно меняете отображение источника каталога.

...