Как отправить команду в Docker-контейнер? - PullRequest
0 голосов
/ 27 августа 2018

В процессе развертывания мне нужно запустить npm run production после того, как файлы станут доступны на сервере.

Поскольку я развернул в контейнере Docker, я решил, что мне нужно запустить что-то вроде:

cd /apps/laradock/ && docker-compose exec -T workspace bash -c "cd /var/www/myapp/ && npm run production"

К сожалению, это приводит к ошибке:

bash: npm: command not found

Но npm доступен как вне контейнера, так и внутри!

  • Вне контейнера which npm производит /home/serviceUser/.nvm/versions/node/v10.9.0/bin/npm
  • И если я войду в контейнер через cd /apps/laradock/ && docker-compose exec workspace bash, а затем запусту which npm, он тоже будет установлен (и показывает /home/laradock/.nvm/versions/node/v10.9.0/bin/npm).

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Интересно, работает ли обновление npm и nodejs? Вот что я сделал (как root, а не входя в контейнер рабочей области с --user=laradock):

cd /apps/laradock/ && docker-compose exec workspace bash
apt-get update
apt-get install -y npm
curl -sL https://deb.nodesource.com/setup_10.x | bash -
apt-get install -y nodejs

(из https://stackoverflow.com/a/34558299/470749 и https://askubuntu.com/a/1044694/48214)

Теперь это работает: docker exec -it laradock_workspace_1 /bin/sh -c "cd /var/www/myapp/ && npm run production"

Было бы замечательно, если бы я мог заставить этот подобный вопрос работать тоже: Как использовать Deployer с Docker (Laradock)

P.S. Теперь вне контейнера npm -v показывает «6.2.0», а nodejs -v показывает «v4.2.6», а внутри контейнера: npm -v показывает «6.4.0» и nodejs -v показывает «v10.9.0» и nvm --version показывает "0.33.8".

Я все еще не уверен, как заставить это установить должным образом в Dockerfile Laradock. Стандартный способ установки nvm и npm, по-видимому, не предоставляет их командам вне контейнера, таким как docker exec -it laradock_workspace_1 /bin/bash -c "npm -v".

0 голосов
/ 27 августа 2018

2 варианта здесь.

1) использовать полный путь двоичного файла npm; вместо использования npm run production используйте /home/laradock/.nvm/versions/node/v10.9.0/bin/npm run production

2) добавьте nvm в ваш .bashrc (если вы используете bash), чтобы получить его, чтобы вы могли напрямую ввести nvm:

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm

Не уверен, как вы установили nvm, так как, если вы следовали инструкции по установке со страницы github, это должно было быть добавлено уже в ваш файл .bashrc

Для получения дополнительной информации о том, как установить nvm, получить его и использовать, вы можете проверить ссылку ниже: https://github.com/creationix/nvm#install-script

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