【发布时间】:2017-04-10 18:35:51
【问题描述】:
我有一个 play scala 应用程序,我通过 AWS Elasticbeanstalk 控制台将其部署为通用 docker 应用程序。当我在本地运行应用程序时,我没有看到任何问题,所以我认为代码是正确的。 我需要有能力
- 将文件写入本地磁盘
- 在这些文件上运行一些命令行实用程序(如 ffmpeg)
但是,我的应用程序不写入本地磁盘,也不让我执行命令行实用程序。
val localFile = new File(s"$localFilePath/$siteId/download/${fileName}.raw")
s3Client.getObject(new GetObjectRequest(bucketName, summary.getKey), localFile)
val cmd = s"ffmpeg -i ${localFile.getAbsolutePath} -vcodec copy ${localFile.getAbsolutePath}.mp4"
cmd !;
这是我的 Dockerrun.aws.json 文件
{"AWSEBDockerrunVersion": "1","Logging": "/opt/docker/logs"}
更新 更新了我的 Dockerrun.aws.json 文件以包含卷映射
{"AWSEBDockerrunVersion": "1","Logging": "/opt/docker/logs","Volumes":[{"HostDirectory": "/tmp/files","ContainerDirectory": "/tmp/files"}]}
应用程序正在写入本地文件,但由于某种原因无法运行 ffmpeg。
Exception : Cannot run program "ffmpeg": error=2, No such file or directory
【问题讨论】:
-
“本地”运行是指在笔记本电脑的容器内还是完全在 Docker 之外?另外,您能否提供有关实际情况的更多信息?你有例外吗?代码是否运行但您没有看到输出文件?
-
locally =
sbt run在我的笔记本电脑上(不是通过 Docker) 实际上没有异常,它假装好像s3Client.getObject下载到 localfile ,但 ffmpeg 抱怨找不到输入文件.当我检查 EC2 实例时,我没有看到任何文件。 -
如果您不使用 Docker 卷,您将看不到 EC2 实例中的文件。 Docker 容器有自己独立的文件系统。你能分享你的 Dockerfile 来帮助理解这个问题吗?这可能与您在容器内使用绝对路径有关。
-
这是我的 Dockerrun.aws.json
{ "AWSEBDockerrunVersion": "1", "Logging": "/opt/docker/logs" } -
我的意思是 - 你的 Dockerfile。这是用于构建容器映像的内容。 Dockerrun 文件是 Beanstalk 用来从 Docker 映像部署容器的文件。你有 Dockerfile 吗?如果是这样,您可以将其粘贴到原始帖子中吗?如果没有,您的代码如何运行?根据您粘贴为 Dockerrun 文件的内容,Beanstalk 将不知道要运行哪个 Docker 容器。在此处查看官方文档:docs.aws.amazon.com/elasticbeanstalk/latest/dg/….
标签: scala amazon-web-services docker amazon-ec2 amazon-elastic-beanstalk