代码之家  ›  专栏  ›  技术社区  ›  Simon

Docker run bash节点:未找到命令

  •  0
  • Simon  · 技术社区  · 4 年前

    我有下面的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
    
    0 回复  |  直到 4 年前
        1
  •  2
  •   Hans Kilian    4 年前

    当您以交互方式运行bash时 .bashrc 文件将被运行。当您直接在 docker run 命令时,bash以非交互方式运行。bashrc没有运行。

    NVM使用。bashrc需要进行设置,所以它需要运行。

    您可以使用 -i 选项然后它会工作,但你会得到一些警告,因为它试图做一些终端失败的事情。

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

    如果不使用nvm动态切换节点版本,则最好在不使用nvm的情况下安装所需的节点版本。

    推荐文章