Docker 不在终端时执行 "command not found"
Docker exec "command not found" when not in terminal
我有点迷失 Docker。我尝试通过 PM2 进程管理器启动我的 NodeJS 应用程序。一般语法是 pm2 start app.js
.
有效:
首先登录 运行ning 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 可执行文件?
供参考 - 我的 Docker 文件。 (它基于 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 中添加 ENV PATH=$PATH:/root/.nvm/versions/node/v10.15.3/bin/
修复了它。
我想更好的解决方案如下所示,而不是使用导出,而不是在多行中编写节点版本,这使得修改更难:
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
我有点迷失 Docker。我尝试通过 PM2 进程管理器启动我的 NodeJS 应用程序。一般语法是 pm2 start app.js
.
有效:
首先登录 运行ning 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 可执行文件?
供参考 - 我的 Docker 文件。 (它基于 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 中添加 ENV PATH=$PATH:/root/.nvm/versions/node/v10.15.3/bin/
修复了它。
我想更好的解决方案如下所示,而不是使用导出,而不是在多行中编写节点版本,这使得修改更难:
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