【问题标题】:Docker exec "command not found" when not in terminal不在终端中时,Docker exec“找不到命令”
【发布时间】:2019-08-05 13:07:47
【问题描述】:

我对 Docker 有点迷茫。我尝试通过 PM2 进程管理器启动我的 NodeJS 应用程序。一般语法是pm2 start app.js

这行得通: 首先登录到正在运行的 docker 容器:
docker exec -it mongodb-plus /bin/bash
然后在容器内,运行 pm2:
root@367a1f9d1XXX:/# pm2 start app.js

这失败了: 但是当我尝试在没有交互式终端会话的情况下达到相同的效果时:
docker exec mongodb-plus /bin/bash -c "pm2 start app.js"

...它以bash: pm2: command not found 失败

问题: 为什么 bash 找不到第二个变体的 pm2 可执行文件?


供参考 - 我的 Dockerfile。 (基于mongo镜像,然后安装adminMongo。):

FROM mongo
#Install basic tools via apt-get
RUN apt-get update &&\
    apt-get install -y nano git curl &&\
#Install NVM and latest LTS NodeJS vesion
    curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash &&\
    export NVM_DIR="$HOME/.nvm" &&\
    [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" &&\
    nvm install --lts &&\
    nvm use --lts &&\
    nvm alias default lts/* &&\
#Install adminMongo
    mkdir -p /home/srvuser/apps/adminMongo && cd /home/srvuser/apps/adminMongo && git clone https://github.com/mrvautin/adminMongo.git && mv adminMongo/* . && ls -la &&\
    npm install &&\
#Install PM2 and autostart
    npm install -g pm2 &&\
    pm2 startup
COPY ./app.json /home/srvuser/apps/adminMongo/config
#Expose mongoDB, adminMongo
EXPOSE 27017 1234

其实我是用docker run --rm --name mongodb-plus -v mongodata:/data/db -p 27017:27017 -p 1234:1234 mongodb-rcore --auth启动容器

我的目标是在容器启动时自动从 adminMongo 运行 app.js。

【问题讨论】:

  • 您可以将您的 Dockerfile 添加到问题中吗?您不需要使用docker exec 来启动您的应用程序。
  • @DavidMaze 我添加了 Dockerfile。我的目标是在容器启动时启动 adminMongo NodeJS。由于我在官方 mongo 图像之上构建图像,因此无法使用 CMD/ENTRYPOINT,因为 mongo 图像大量使用它......
  • 您最好为您的应用程序和数据库使用单独的容器,而不是使用 nvm。
  • @netblognet 我不确定,但我想这与 bashrc 或 PATH 变量有关,除非您在容器内,否则其中一个不知道 n 二进制文件路径
  • @MostafaHussein 感谢您的提示。将 pm2 的路径添加到 Dockerfile 中的 $PATH 修复它。

标签: node.js bash shell docker pm2


【解决方案1】:

在 Dockerfile 中添加 ENV PATH=$PATH:/root/.nvm/versions/node/v10.15.3/bin/ 修复了它。

【讨论】:

    【解决方案2】:

    我想一个更好的解决方案如下,而不是使用导出,而不是在多行中编写节点版本,这使得修改变得更加困难:

    ENV NVM_DIR /root/.nvm
    ENV NODE_VERSION v0.33.2
    ENV NODE_PATH $NVM_DIR/v$NODE_VERSION/lib/node_modules #Ensure that this is the actual path
    ENV PATH $NVM_DIR/versions/node/v$NODE_VERSION/bin:$PATH
    # Then use the NODE_VERSION do download the nodejs version you want
    

    【讨论】:

      猜你喜欢
      • 2013-10-30
      • 1970-01-01
      • 2021-05-05
      • 2016-04-11
      • 1970-01-01
      • 1970-01-01
      • 2016-11-21
      • 2022-06-15
      • 2022-10-30
      相关资源
      最近更新 更多