在Elastic Beanstalk上托pipe的Docker化PHP应用程序中出现“python:not found”错误

我有一个PHP应用程序,它将在用户提交时编译Python代码,然后返回结果。 该应用程序托pipe在Elastic Beanstalk上,并且它工作正常,直到我希望它在Docker容器中运行。

对于工作版本,我将应用程序部署在64bit Amazon Linux with PHP 7.0的平台64bit Amazon Linux with PHP 7.0上运行的Amazon Elastic Beanstalk上,并提交一个简单的代码,例如print(1+1) ,我将得到2的结果。

要在Docker容器中运行应用程序,我按照教程http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_docker_ecstutorial.html#create_deploy_docker_ecstutorial_connect中的说明操作,修改了它的php-app文件夹以包含我自己的PHP应用程序并将平台设置为Multi-container Docker

但是,当我试图提交一个简单的代码,如print(1+1) ,我得到的结果为
Array ( [0] => sh: 1: python: not found )

我检查了我的EC2实例,并确认实例已经安装了python。 PHP应用程序不应该导致这个错误(我猜),因为它在另一个平台上完美运行。 所以我的问题是为什么我不能得到的结果,而不是有一个python not found错误?

我是AWS和Docker的新手。 请原谅我,如果我没有足够清楚地expression我的问题。 请让我知道,如果你需要我的控制台输出在EC2实例或我的应用程序文件或任何帮助。 所有的帮助都表示赞赏!

在容器中运行PHP应用程序时,您使用的是php:fpm基本映像,而不是安装Python。 理想情况下,你会编写自己的Dockerfile,并将Python列为你的依赖项之一。 如果你想坚持Elastic Beanstalk格式,解决这个问题的一种方法是确保在启动容器时安装Python。 根据文档,Dockerrun.aws.json中的cotainerDefinitions参数允许包含ECS任务定义的常用参数,因此您可以添加一个名为“command”的字段(映射到Docker API中的CMD命令) ,并将其设置为[“apt-get”,“update”,“&&”,“apt-get”,“install”,“python”]:

  "containerDefinitions": [ { "name": "php-app", "image": "php:fpm", "essential": true, "memory": 128, "mountPoints": [ { "sourceVolume": "php-app", "containerPath": "/var/www/html", "readOnly": true, "command": ["apt-get", "update", "&&", "apt-get", "install", "python"] } ] }, 

这将在启动容器时安装Python,并将其提供给PHP应用程序。 或者,您可以从php:fpm创build您自己的基本映像,在其上安装Python,将其上传到ECR,并将其URI包含在containerDefinitions:image parmeter(而不是php:fpm)中。