不在终端时Docker exec“命令未找到”

问题描述 投票:0回答:2

我对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.

node.js bash shell docker pm2
2个回答
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

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.