代码之家  ›  专栏  ›  技术社区  ›  Gangstead

未找到WSL节点路径?音量似乎越来越大

  •  0
  • Gangstead  · 技术社区  · 8 年前

    我正试图通过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等。。。

    1 回复  |  直到 8 年前
        1
  •  1
  •   nateleavitt    7 年前

    听起来这类似于我在windows/wsl环境中遇到的路径问题。尝试将卷定义更改为完整路径,看看这是否解决了问题。

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

    即使您已使用docker文件将文件复制到容器中,但在使用docker compose装载卷时,它并不真正关心这一点。实际上,您更改了目录源的映射。

        2
  •  1
  •   user1718229    6 年前

    我遇到了类似的情况,这与WSL/Docker中的符号链接创建有关。据此, Github issue 向MS报告,您只需在系统设置中启用开发者模式。

    编辑: Microsoft article 描述如何在Windows 10计算机上启用开发人员模式。