Docker exec "команда не найдена", когда нет в терминале - PullRequest
0 голосов
/ 14 марта 2019

Я немного растерялся с Докером. Я пытаюсь запустить приложение NodeJS через менеджер процессов PM2. Общий синтаксис: pm2 start app.js.

Это работает: Сначала войдите в работающий докер-контейнер:
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. (Он основан на образе монго, затем установите 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

Моя цель - автоматически запускать app.js из adminMongo при запуске контейнера.

Ответы [ 2 ]

2 голосов
/ 14 марта 2019

Полагаю, лучшее решение было бы таким, как показано ниже, вместо использования экспорта и записи версии узла в несколько строк, что усложняет изменение:

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 голосов
/ 14 марта 2019

Добавление ENV PATH=$PATH:/root/.nvm/versions/node/v10.15.3/bin/ в Dockerfile исправило его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...