运行 节点容器使用 docker 组合时出错
Error when running node container using docker compose
当运行宁"docker-compose up"时,我得到以下错误:
npm info lifecycle server@1.0.0~dev: server@1.0.0
> server@1.0.0 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.<anonymous>
(/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 server@1.0.0~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! server@1.0.0 dev: `nodemon -L ./bin/www --exec babel-node`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the server@1.0.0 dev script 'nodemon -L ./bin/www --
exec babel-node'.
我的 dockerfile 如下所示:
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"]
我的服务是这样的:
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
我尝试删除所有容器和图像,然后再次 运行 整个操作,但出现了同样的错误。 运行ning "docker-compose build".
时似乎构建良好
我想在这里完成的是:
1.让容器处理所有的依赖(节点模块)
2.将我的代码库挂载到容器中
3.使用nodemon进行热重载
您的问题是卷共享。当您将卷从主机共享到容器时。如果该文件夹已存在于容器中,则宿主容器将隐藏容器文件夹。
如果容器内有 10 个文件而主机上有 0 个文件,那么在卷映射后容器将看到 0 个文件。因为主机文件夹已安装并且什么也没有。所以你Dockerfile
声明
RUN npm install
如果主机卷没有完成 npm 安装,实际上已经消失了。幸运的是,解决方案很简单。您可以将 CMD
更改为以下
CMD bash -c "npm install && npm run dev"
如果您不想更改 Dockerfile
,您可以在 docker-compose.yml
文件中为 node
服务添加以下内容
command: bash -c "npm install && npm run dev"
编辑(8 月 14 日):
如果你想让你的依赖关系在图像中,那么你需要在你的 docker-compose.yml
中做一些改变,你需要的是保持内部代码不变,只需链接 node_modules
来自该目录到您的应用程序目录
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
我注意到的另一点是你的 运行ning package.json
安装在 /code
并把你的代码 /code/app
当你 运行图片。但是根据我上面建议的新编辑,这应该可以工作
我最终得到的结果与我最初所做的类似。不确定是什么导致了我的 OP 错误,但不同之处似乎是我将依赖项安装在不同的目录中。
Docker 文件:
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 中的服务-撰写:
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
这样我的依赖项只在构建时安装。
当运行宁"docker-compose up"时,我得到以下错误:
npm info lifecycle server@1.0.0~dev: server@1.0.0
> server@1.0.0 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.<anonymous>
(/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 server@1.0.0~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! server@1.0.0 dev: `nodemon -L ./bin/www --exec babel-node`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the server@1.0.0 dev script 'nodemon -L ./bin/www --
exec babel-node'.
我的 dockerfile 如下所示:
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"]
我的服务是这样的:
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
我尝试删除所有容器和图像,然后再次 运行 整个操作,但出现了同样的错误。 运行ning "docker-compose build".
时似乎构建良好我想在这里完成的是: 1.让容器处理所有的依赖(节点模块) 2.将我的代码库挂载到容器中 3.使用nodemon进行热重载
您的问题是卷共享。当您将卷从主机共享到容器时。如果该文件夹已存在于容器中,则宿主容器将隐藏容器文件夹。
如果容器内有 10 个文件而主机上有 0 个文件,那么在卷映射后容器将看到 0 个文件。因为主机文件夹已安装并且什么也没有。所以你Dockerfile
声明
RUN npm install
如果主机卷没有完成 npm 安装,实际上已经消失了。幸运的是,解决方案很简单。您可以将 CMD
更改为以下
CMD bash -c "npm install && npm run dev"
如果您不想更改 Dockerfile
,您可以在 docker-compose.yml
文件中为 node
服务添加以下内容
command: bash -c "npm install && npm run dev"
编辑(8 月 14 日):
如果你想让你的依赖关系在图像中,那么你需要在你的 docker-compose.yml
中做一些改变,你需要的是保持内部代码不变,只需链接 node_modules
来自该目录到您的应用程序目录
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
我注意到的另一点是你的 运行ning package.json
安装在 /code
并把你的代码 /code/app
当你 运行图片。但是根据我上面建议的新编辑,这应该可以工作
我最终得到的结果与我最初所做的类似。不确定是什么导致了我的 OP 错误,但不同之处似乎是我将依赖项安装在不同的目录中。
Docker 文件:
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 中的服务-撰写:
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
这样我的依赖项只在构建时安装。