如何发送命令到Docker容器?

时间:2018-08-27 20:38:24

标签: node.js bash docker npm deployment

在部署过程中,我需要在服务器上的文件可用后运行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 :(得分:1)

这里有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,获取和使用nvm的更多信息,您可以检查以下链接: https://github.com/creationix/nvm#install-script

答案 1 :(得分:1)

我想知道升级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/470749https://askubuntu.com/a/1044694/48214

现在这可行:docker exec -it laradock_workspace_1 /bin/sh -c "cd /var/www/myapp/ && npm run production"

如果我也能解决类似的问题,那就太好了:How to use Deployer with 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”。

我仍然不确定如何将其正确安装在Laradock Dockerfile中。安装nvm和npm的默认方法似乎不会使它们暴露于来自容器外部的命令,例如docker exec -it laradock_workspace_1 /bin/bash -c "npm -v"