我正在使用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
可以在主机中运行吗?
答案 0 :(得分:1)
~
是问题所在,它不是某些shell的有效路径字符,而exec并不像你希望的那样处理它,而且它不是Dockerfile为您扩展。使用以下内容明确说明您的路径:
ENV PATH=/root/.composer/vendor/bin:${PATH}