无法使用docker-compose在docker容器中运行命令

编辑 – 添加文件夹结构

我正在尝试使用docker-compose在docker容器中运行node.js应用程序,但是容器无法运行指定的命令并退出。

我正在运行docker-for-mac,17.09.0-ce-mac35(19611)

这是我的文件夹结构:

. ├── docker-compose.yml ├── backend/ │ ├── Dockerfile │ ├── package.json │ ├── (source files) ├── frontend/ │ ├── Dockerfile │ ├── package.json │ ├── (source files) 

这是我的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" 

我试图玩一下这个命令 – 当把它lspwd我得到了预期的输出。 但是,一旦我尝试使用npm或者像ls ./node_modules这样的文件系统,我会得到相同的错误。 另外,如果我只是启动容器到一个shell,我可以运行任何我想要的命令,包括npm脚本

我发现了这个问题。 似乎在docker-compose文件的command属性中有空格有问题。 解决的办法是把它分解成这样的数组:

 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 

不知道这是否有帮助,但这是我用于我的节点应用程序,它的工作原理。
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"