【问题标题】:Docker run bash node: command not foundDocker 运行 bash 节点:找不到命令
【发布时间】:2022-02-11 18:23:37
【问题描述】:

我有以下 Dockerfile

FROM ubuntu:latest

WORKDIR /

# Without interactive dialogue
ARG DEBIAN_FRONTEND=noninteractive

# Install required packages
RUN apt-get update
RUN apt-get install -y wget gnupg2 software-properties-common git apt-utils vim dirmngr apt-transport-https ca-certificates zip

ENV NODE_VERSION=14

RUN wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash \
    && . .$HOME/.nvm/nvm.sh \
    && nvm install $NODE_VERSION \
    && nvm alias default $NODE_VERSION \
    && nvm use default

# Install Wine from WineHQ Repository
RUN dpkg --add-architecture i386
RUN wget -qO- https://dl.winehq.org/wine-builds/Release.key | apt-key add -
RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv F987672F
RUN apt-add-repository 'deb https://dl.winehq.org/wine-builds/ubuntu/ bionic main'
RUN apt-get update
RUN apt-get install -y --install-recommends winehq-stable

# Installing mono
RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
RUN sh -c 'echo "deb https://download.mono-project.com/repo/ubuntu stable-bionic main" > /etc/apt/sources.list.d/mono-official-stable.list'
RUN apt-get update
RUN apt-get install -y mono-complete

RUN PROJECT_DIR=/root/project

WORKDIR /project

这让我无论在什么平台上都可以构建电子应用程序。一切正常。映像构建以及将其作为容器运行都没有问题。

然后我可以继续手动执行以下操作:

#build the dockerfile
docker build -t debian-wine-electron-builder:0.1 .

#run the docker image as detached container
docker run -dt --name electron-build -v ${PWD}:/project debian-wine-electron-builder:0.1

#open a bash session in the container
docker exec -it electron-build bash

#and in there execute my commands which will build me the electron application
npm install ... #and so on

我现在想创建一个 bash 文件来运行所有命令,使其更易于使用。因此,只需运行 bash 文件,它就会一一执行所有命令。 当我想使用 docker run 命令后跟 `bash -c "command1 ; command2" 我遇到以下问题

#building the image
docker build -t debian-wine-electron-builder:0.1 .

#docker run following commands
docker run --name electron-build -v ${PWD}:/project debian-wine-electron-builder:0.1 bash -c "npm install... ; command2 ..."

尝试npm install时给我这个错误:

bash: npm: command not found

【问题讨论】:

  • 当你执行到容器中时,你确定它在没有脚本的情况下工作吗?
  • 不,抱歉,我并不清楚。带有exec 的那个是我手动手动 进行的。由于我想编写脚本并且只需要在构建命令期间启动容器,我想使用run
  • 它是否与 exec 一起工作?
  • 它适用于 exec 是的。逐步在终端窗口中手动操作。在 docker 容器中启动终端会话,npm在那里工作
  • 手动操作时,容器如何保持活力?您尚未定义 CMD 或 ENTRYPOINT,因此它使用 'bash' 作为来自基本 Ubuntu 映像的命令。由于它不是在交互模式下运行,它会立即退出。

标签: node.js bash docker


【解决方案1】:

当您以交互方式运行 bash 时,您的 .bashrc 文件将被运行。当您直接在 docker run 命令上运行该命令时,bash 会以非交互方式运行,而 .bashrc 不会运行。

NVM 使用 .bashrc 进行设置,因此需要运行。

您可以使用 -i 选项强制 bash 进入交互模式。然后它会工作,但你会收到一些警告,因为它会尝试执行一些失败的终端操作。

docker run --name electron-build -v ${PWD}:/project debian-wine-electron-builder:0.1 bash -i -c "npm install... ; command2 ..."

如果您不使用 nvm 即时切换节点版本,最好不使用 nvm 安装所需的节点版本。

【讨论】:

    猜你喜欢
    • 2012-10-08
    • 2015-08-08
    • 2012-08-23
    • 2022-11-24
    • 2017-08-10
    • 2016-02-13
    • 2021-08-17
    • 2023-02-04
    • 1970-01-01
    相关资源
    最近更新 更多