$PATH中找不到可执行文件

4

我正在为 PHP-FPM 7.1 编写 Dockerfile。最后一行是:

CMD ["php71-php-fpm"]

因为我使用 docker-compose,所以这是启动容器的方法:

docker-compose up -d

容器按照以下代码编译良好(表面上):

Successfully built 014e24455b53
WARNING: Image for service php was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Creating php71-fpm

但是最终出现以下错误:
ERROR: for php  Cannot start service php: invalid header field value "oci runtime error: container_linux.go:247: starting container process caused \"exec: \\\"php71-php-fpm\\\": executable file not found in $PATH\"\n"
ERROR: Encountered errors while bringing up the project.

我尝试了以下方法:
CMD php71-php-fpm

错误消失了,但容器以代码127退出:
> docker-compose ps
  Name              Command             State     Ports
-------------------------------------------------------
php71-fpm   /bin/sh -c php71-php-fpm   Exit 127

我在这里缺少什么?

更新

我在这里找到了以下答案:

当给定的命令在您的PATH系统变量中未找到并且它不是内置shell命令时,/bin/sh返回值127。换句话说,系统无法理解您的命令,因为它不知道在哪里找到您尝试调用的二进制文件。

这使我认为文件php71-paths.sh未被执行,因此路径未正确设置。

再次提问,我缺少什么?

这个php71-fpm将与运行Nginx的另一个容器链接(这是一个WIP和我学习Docker的方式)

这里是完整的Dockerfile供您查看。

2个回答

4
我相信你遇到了麻烦,因为Docker默认运行的shell不是登陆shell,根据这个答案,这意味着在/etc/profile.d/中的脚本将不会被处理。
如果你需要处理profile,请尝试将最后一行更改为CMD ["/bin/sh", "-l", "-c", "php71-php-fpm"]来调用一个登录shell。

我得到了与之前相同的结果。 - ReynierPM
你确定镜像上存在可执行文件吗?在你的镜像上执行 find / -name php71-php-fpm1 只会找到 /etc/logrotate.d 中的入口。 - shiv
注意:我在之前的回答中忘记了 -c。对此我深感抱歉。但是,使用 CMD ["env"]CMD ["/bin/sh", "-l", "-c", "env"] 运行镜像将会显示您的 PATH 中相关的 PHP 目录。 - shiv
这是文件php71-paths.sh,它应该添加路径,也许在容器启动时没有被执行,你能看一下Dockerfile并告诉我是否是问题所在以及在这种情况下的解决方案吗? - ReynierPM
我相信如果使用/bin/sh -l -c ...运行容器,它会获取php 71-paths.sh文件,这一点可以通过在容器中运行env命令来打印环境变量进行证实(PATH包含对php目录的引用)。然而,我的担忧是你的镜像中实际上并不存在名为php71-php-fpm的可执行文件。如上所述,在容器运行时我无法在任何地方找到它。这是否实际上是需要运行以启动php的命令?抱歉,我现在无法测试您的镜像。 - shiv
我在这里找到了答案(https://developers.redhat.com/blog/2014/12/29/running-php-fpm-in-docker/),感谢伟大的Remi(来自RemiRepo),解决方案是:`ENTRYPOINT /opt/remi/php71/root/usr/sbin/php-fpm --nodaemonize`。我接受了你的问题,因为你一直在帮助我。 - ReynierPM

0
我昨晚遇到了这个问题,通过使用Compose v2并更新Docker桌面版来解决了它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接