![](/img/trans.png)
[英]Nodejs: Exec from child_process returns bin/sh: 1: command not found but works when writing manually in terminal?
[英]Docker exec “command not found” when not in terminal
我對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: 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。
我猜想更好的解決方案如下所示,而不是使用export而不是在多行中編寫節點版本,這使得修改起來更加困難:
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
在ENV PATH=$PATH:/root/.nvm/versions/node/v10.15.3/bin/
添加ENV PATH=$PATH:/root/.nvm/versions/node/v10.15.3/bin/
可以修復它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.