Error when running node container using docker compose
运行" docker-compose up"时,出现以下错误:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | npm info lifecycle [email protected]~dev: [email protected] > [email protected] dev /code/app > nodemon -L ./bin/www --exec babel-node sh: 0: getcwd() failed: No such file or directory path.js:1144 cwd = process.cwd(); ^ Error: ENOENT: no such file or directory, uv_cwd at Error (native) at Object.resolve (path.js:1144:25) at Function.Module._resolveLookupPaths (module.js:361:17) at Function.Module._resolveFilename (module.js:431:31) at Function.Module._load (module.js:388:25) at Module.require (module.js:468:17) at require (internal/module.js:20:19) at Object. (/usr/local/lib/node_modules/nodemon/bin/nodemon.js:3:11) at Module._compile (module.js:541:32) at Object.Module._extensions..js (module.js:550:10) npm info lifecycle [email protected]~dev: Failed to exec dev script npm ERR! Linux 4.9.36-moby npm ERR! argv"/usr/local/bin/node""/usr/local/bin/npm""run""dev" npm ERR! node v6.3.1 npm ERR! npm v3.10.3 npm ERR! code ELIFECYCLE npm ERR! [email protected] dev: `nodemon -L ./bin/www --exec babel-node` npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the [email protected] dev script 'nodemon -L ./bin/www -- exec babel-node'. |
我的dockerfile看起来像这样:
1 2 3 4 5 6 7 8 9 10 11 12 13 | FROM joakimbeng/node-zeromq RUN mkdir /code/ RUN mkdir /code/app/ COPY package.json /code/ WORKDIR /code RUN npm install -g nodemon babel-cli RUN npm install WORKDIR /code/app CMD ["npm","run","dev"] |
我的服务是这样的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | node: build: ./node/ ports: -"3000:3000" volumes: - ../code:/code/app links: - mongodb - python environment: - NODE_ENV=dev - NODE_PATH=/code/node_modules - MONGODB_ADDRESS=mongodb - PYTHON_ADDRESS=python |
我试图删除所有容器和图像并再次运行整个过程,但是出现相同的错误。 运行" docker-compose build"时,它似乎构建良好。
我要在这里完成的是:
1.让容器处理所有依赖项(节点模块)
2.将我的代码库安装到容器
3.使用nodemon进行热重装
最后我得到了与最初相似的东西。不知道是什么原因导致了我的OP中的错误,但是区别似乎是我将依赖项挂载到了另一个目录中。
Dockerfile:
1 2 3 4 5 6 7 8 9 10 11 12 | FROM joakimbeng/node-zeromq RUN mkdir /code/ RUN mkdir /dependencies/ COPY package.json /dependencies/ WORKDIR /dependencies/ RUN npm install -g nodemon babel-cli npm install WORKDIR /code/ CMD bash -c"npm run dev" |
docker-compose中的服务:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | node: build: ./node/ ports: -"3000:3000" volumes: - ../code/:/code links: - mongodb - python environment: - NODE_ENV=dev - NODE_PATH=/dependencies/node_modules - MONGODB_ADDRESS=mongodb - PYTHON_ADDRESS=python |
这样,我的依赖项仅安装在构建中。
您的问题是卷共享。从主机到容器共享卷时。如果文件夹已经存在于容器中,则宿主容器将隐藏容器文件夹。
如果容器中有10个文件,主机上有0个文件,则在进行卷映射后,容器将看到0个文件。因为主机文件夹已挂载,但没有任何内容。所以你
1 | RUN npm install |
如果主机卷未完成npm安装,则实际上已消失。幸运的是,解决方案很简单。您可以将
1 | CMD bash -c"npm install && npm run dev" |
如果您不想更改
1 | command: bash -c"npm install && npm run dev" |
编辑(8月14日):
如果您希望依赖项显示在映像中,那么您需要在
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | node: build: ./node/ ports: -"3000:3000" volumes: - ../code:/code/app command: bash -c"ln -fs /code/node_modules /code/app/node_modules && exec npm run dev" links: - mongodb - python environment: - NODE_ENV=dev - NODE_PATH=/code/node_modules - MONGODB_ADDRESS=mongodb - PYTHON_ADDRESS=python |
我注意到的另一点是,您正在运行的