我对Docker有点迷茫。我尝试通过PM2进程管理器启动我的NodeJS应用程序。一般的语法是
然后在容器内运行pm2:
供参考-我的Dockerfile。(它基于mongo镜像,然后安装adminMongo。)
实际上,我是用
我的目标是在容器启动时自动运行adminMongo中的app.js。
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。
docker exec
来启动你的应用程序。 - David Maze