gpt4 book ai didi

node.js - 未找到 WSL Node 路径?卷似乎已安装

转载 作者:行者123 更新时间:2023-12-02 21:15:42 25 4
gpt4 key购买 nike

我正在尝试通过 docker compose 设置单元测试运行时间。当我尝试通过 docker-compose 运行 npm 脚本时, Node 的行为就像在路径上找不到模块一样:

➜ 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",

docker -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 for Mac 上。这次我正在运行 Docker For Windows 并通过 WSL 运行命令。我已共享驱动器并将/mnt/c 绑定(bind)到/c。

其他引用 this project我可以在 Docker for Mac 上运行单元测试,但得到相同的 sh: mocha: not found在 Windows 10 上通过连接到 Docker for Windows 的 WSL 运行它时。它似乎只是二进制文件的路径 node_modules/.bin没有找到,因为我可以启动项目而没有任何错误,它只是找不到任何二进制文件,如 mocha、nsp、gulp 等......

最佳答案

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

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

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

关于node.js - 未找到 WSL Node 路径?卷似乎已安装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51049168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com