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

时间:2017-12-05 17:48:52

标签: node.js docker docker-compose

已编辑 - 已添加文件夹结构

我尝试使用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

我尝试使用该命令 - 将其更改为pwdnpm时,我得到了预期的输出。但是,一旦我尝试使用ls ./node_modules或文件系统中的任何内容(如npm),我都会遇到同样的错误。另外,如果我只是将容器启动到shell中,我就可以运行我想要的任何命令,包括header('Location:.$_POST["longlink"]'); 脚本

2 个答案:

答案 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"