【问题标题】:npm install package through running node containernpm 通过运行节点容器安装包
【发布时间】:2020-01-19 21:29:42
【问题描述】:

我已按照 node.js documentation 中的步骤创建 Dockerfile。我正在尝试运行命令 docker exec -it mynodeapp /bin/bash 以进入容器并通过 npm 安装新软件包,但出现以下错误

OCI runtime exec failed: exec failed: container_linux.go:346: starting container process caused "exec: \"/bin/bash\": stat /bin/bash: no such file or directory": unknown

任何想法我做错了什么?

对于 ref,这就是我的 docker-compose 和 dockerfile 的样子

FROM node:latest

RUN mkdir /app
WORKDIR /app

RUN npm install -g nodemon

COPY package.json package.json
RUN npm install

COPY . .

EXPOSE 8080
CMD [ "node", "server.js" ]

version: '3'

services:
  nodejs:
    container_name: mynodeapp
    build: .
    command: nodemon --inspect server.js
    ports:
      - '5000:8080'
    volumes:
      - '.:/app'
    networks:
      - appnet
networks:
  appnet:
    driver: 'bridge'

【问题讨论】:

  • docker exec mynodeapp -it /bin/sh ?
  • 同样没有运气。我也试过docker-comose exec nodejs /bin/bash,但没用
  • 使用docker exec 在容器中安装包本身似乎不是一个好主意:一旦容器退出,更改就会丢失。将依赖项添加到您的package.json 文件中,在本地对其进行测试,然后重新运行docker-compose build

标签: node.js docker npm npm-install


【解决方案1】:

docker exec mynodeapp -it /bin/bash 更改为docker exec -it mynodeapp /bin/sh

根据docker documentation,正确的语法如下:

docker exec [OPTIONS] 容器命令 [ARG...]

  • -i-t 是选项
  • mynodeapp 是容器
  • /bin/bash - 是 容器内的命令

另外一个问题是容器内没有bash shell,所以你可以使用sh shell。

【讨论】:

  • 我这样做了,但也没有用。 docker exec -it mynodeapp /bin/bash 实际上是我在第一名中所做的,而我也尝试过相反的方法
  • 尝试docker exec -it mynodeapp /bin/bash 时出现什么错误?和你尝试docker exec mynodeapp -it /bin/bash时一样吗?你也可以试试docker exec -it mynodeapp /bin/sh
  • OCI runtime exec failed: exec failed: container_linux.go:346: starting container process caused "exec: \"/bin/bash\": stat /bin/bash: no such file or directory": unknown
  • 试试docker exec -it mynodeapp /bin/sh
  • 已更新。 /bin/bash/bin/sh 是 shell 的不同实现。在某些操作系统中,/bin/bash 未安装。
猜你喜欢
  • 2023-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多