【问题标题】:dumb-init npm install: No such file or directory when running in docker-compose哑初始化 npm 安装:在 docker-compose 中运行时没有这样的文件或目录
【发布时间】:2020-09-20 23:38:10
【问题描述】:

dockerfile

    FROM node:${NODE_VERSION}-buster-slim

    ENTRYPOINT ["/usr/bin/dumb-init", "--"]

    RUN apt-get update && \
        apt-get install -qqy --no-install-recommends \
        ca-certificates \
        dumb-init \
        build-essential && \
        rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

    ENV HOME=/home/node
    WORKDIR $HOME/app

    COPY --chown=node:node . .

    RUN set -xe && \
        chown -R node /usr/local/lib /usr/local/include /usr/local/share /usr/local/bin && \
        npm install && npm cache clean --force

    EXPOSE 4200

    CMD ["node"]

docker-compose

    webapp            :
    container_name    : webapp
    hostname          : webapp
    build             :
      dockerfile      : Dockerfile
      context         : ${PWD}/app
    image             : webapp:development
    command           :
                      - npm install
                      - npm run start
    volumes           : 
                      - ${PWD}/webapp:/app
    networks          :
                      - backend
    ports             : 
                      - 4200:4200
    restart           : on-failure
    tty               : true
    stdin_open        : true
    env_file          :
                      - variables.env

我可以使用 docker run webapp bash -c "npm install; npm run start" 但是当我运行撰写文件时,它说 webapp | [dumb-init] npm install: No such file or directory

我尝试将 docker-compose 命令替换为“node”前缀,但同样的错误,但使用 node npm install: no such file or directory

谁能告诉我哪里出了问题?

【问题讨论】:

    标签: node.js docker docker-compose


    【解决方案1】:

    当您在 docker-compose.yml 文件中使用 command: 的列表形式(或 Dockerfile CMD 的 JSON 数组形式)时,您提供的是单个命令中的单词列表,而不是单独命令的列表.一旦这与 Dockerfile 中的 ENTRYPOINT 结合起来,容器命令就是

    /usr/bin/dumb-init -- 'npm install' 'npm run start'
    

    当没有 /usr/bin/npm\ install 文件(包括文件名中的空格)时,您会收到该错误。

    由于您在 Dockerfile 中COPY 应用程序代码并在那里运行npm install,因此您无需在应用程序启动时重复此步骤。您应该能够删除 docker-compose.yml 文件中的 volumes:command: 部分,以使用图像内置的内容。

    如果您确实需要重复此command:,请完全按照您在docker run 命令中指定的形式进行操作,不要使用列表语法

    command: bash -c 'npm install; npm run start'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-15
      • 2022-06-10
      • 2020-04-08
      • 2018-03-25
      • 1970-01-01
      • 2019-10-07
      • 1970-01-01
      • 2017-09-01
      相关资源
      最近更新 更多