如何在$ PATH上执行主机命令?

时间:2016-12-23 03:01:33

标签: bash laravel docker docker-compose

我正在使用Composer将Laravel Installer安装为Docker容器的一部分。 Laravel全局安装,意味着它转到~/.composer/vendor,然后在~/.composer/vendor/bin下添加可执行文件。

我将目录~/.composer/vendor/bin添加到Dockerfile中的$PATH,如下所示:

ENV PATH="~/.composer/vendor/bin:${PATH}"

如果我运行命令docker exec -it php-fpm bash并从容器内部运行echo $PATH,我得到以下内容:

# echo $PATH
/opt/remi/php71/root/usr/bin:/opt/remi/php71/root/usr/sbin:~/.composer/vendor/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

如果我在容器中运行命令laravel,我得到以下内容:

# laravel
Laravel Installer 1.3.3

Usage:
  command [options] [arguments]

Options:
  -h, --help            Display this help message
  -q, --quiet           Do not output any message
  -V, --version         Display this application version
      --ansi            Force ANSI output
      --no-ansi         Disable ANSI output
  -n, --no-interaction  Do not ask any interactive question
  -v|vv|vvv, --verbose  Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug

Available commands:
  help  Displays help for a command
  list  Lists commands
  new   Create a new Laravel application.

所以一切似乎都运转正常。但是,如果我在主机上运行以下命令(容器外):

$ docker exec -it php-fpm laravel

我收到以下错误:

rpc error: code = 13 desc = invalid header field value "oci runtime error: exec failed: container_linux.go:247: starting container process caused \"exec: \\\"laravel\\\": executable file not found in $PATH\"\n"

我在这里缺少什么?命令laravel可以在主机中运行吗?

1 个答案:

答案 0 :(得分:1)

~是问题所在,它不是某些shell的有效路径字符,而exec并不像你希望的那样处理它,而且它不是Dockerfile为您扩展。使用以下内容明确说明您的路径:

ENV PATH=/root/.composer/vendor/bin:${PATH}