我正在为 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供您查看。
find / -name php71-php-fpm1
只会找到/etc/logrotate.d
中的入口。 - shiv-c
。对此我深感抱歉。但是,使用CMD ["env"]
和CMD ["/bin/sh", "-l", "-c", "env"]
运行镜像将会显示您的PATH
中相关的 PHP 目录。 - shiv/bin/sh -l -c ...
运行容器,它会获取php 71-paths.sh
文件,这一点可以通过在容器中运行env
命令来打印环境变量进行证实(PATH
包含对php
目录的引用)。然而,我的担忧是你的镜像中实际上并不存在名为php71-php-fpm
的可执行文件。如上所述,在容器运行时我无法在任何地方找到它。这是否实际上是需要运行以启动php的命令?抱歉,我现在无法测试您的镜像。 - shiv