已编辑 - 已添加文件夹结构
我尝试使用docker-compose在docker容器中运行node.js应用程序,但是,容器无法运行指定的命令并退出。
我正在运行docker-for-mac,版本17.09.0-ce-mac35(19611)
这是我的文件夹结构:
docker-compose
这是我的version: "3"
services:
ihm-backend:
environment:
- NODE_ENV=development
build: ./backend
volumes:
- ./backend:/src
ports:
- "3000:3000"
- "9222:9222"
working_dir: /src
command:
- "./node_modules/.bin/nodemon --watch ./ --inspect=0.0.0.0:9222 --nolazy ./app.js"
文件:
Dockerfile
这是我的FROM node:6-alpine
COPY ./package.json src/
COPY ./npm-shrinkwrap.json src/
RUN cd /src && npm install
COPY . /src
WORKDIR /src
CMD ["./bin/www"]
:
docker-compose
请注意,Cannot start service ihm-backend: oci runtime error: container_linux.go:265:
starting container process caused "exec: \"./node_modules/.bin/nodemon --watch
./ --inspect=0.0.0.0:9222 --nolazy ./app.js\": stat ./node_modules/.bin/nodemon
--watch ./ --inspect=0.0.0.0:9222 --nolazy ./app.js: no such file or directory"
文件会覆盖该命令。
当我运行它时,我收到以下错误:
ls
我尝试使用该命令 - 将其更改为pwd
或npm
时,我得到了预期的输出。但是,一旦我尝试使用ls ./node_modules
或文件系统中的任何内容(如npm
),我都会遇到同样的错误。另外,如果我只是将容器启动到shell中,我就可以运行我想要的任何命令,包括header('Location:.$_POST["longlink"]');
脚本
答案 0 :(得分:1)
我发现了问题。好像在command
文件的docker-compose
属性中有空格是个问题。解决方案是将其拆分为如下数组:
version: "3"
services:
ihm-backend:
environment:
- NODE_ENV=development
build: ./backend
volumes:
- ./backend:/src
ports:
- "3000:3000"
- "9222:9222"
working_dir: /src
command:
- /src/node_modules/.bin/nodemon
- --watch
- ./
- --inspect=0.0.0.0:9222
- --nolazy
- ./app.js
答案 1 :(得分:0)
不确定这是否有帮助,但这是我用于我的节点应用程序并且它可以工作
Dockerfile
FROM node:carbon
# Create app directory
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
RUN npm install nodemon -g
# Bundle app source
COPY . .
docker-compose
web:
build: .
volumes:
- ".:/src/app"
ports:
- "3000:3000"
command:
- "nodemon"