如何获取命令以从 Elastic Beanstalk 上的 Dockerfile.aws.json 运行?

Posted

技术标签:

【中文标题】如何获取命令以从 Elastic Beanstalk 上的 Dockerfile.aws.json 运行?【英文标题】:How do I get a Command to run from a Dockerfile.aws.json on Elastic Beanstalk? 【发布时间】:2020-10-30 06:18:57 【问题描述】:

我有一个Dockerfile 和一个Dockerfile.aws.json


    "AWSEBDockerrunVersion": "1",
    "Ports": [
        "ContainerPort": "5000",
        "HostPort": "5000"
    ],
    "Volumes": [
        "HostDirectory": "/tmp/download/models",
        "ContainerDirectory": "/models"
    ],
    "Logging": "/var/log/nginx",
    "Command": "mkdir -p /tmp && axel https://example.com/models.zip -o /tmp/models.zip"

但是当我部署时,它没有运行我指定的Command。我做错了什么?

【问题讨论】:

【参考方案1】:

如果您的 Dockerfile 中有 ENTRYPOINT,则 Command 将作为其 arguments 附加:

指定要在容器中执行的命令。如果您指定一个入口点,那么命令将作为入口点的参数添加。有关详细信息,请参阅 Docker 文档中的 CMD。

因此,您的命令mkdir -p /tmp ... 将用作python3 -m flask run --host=0.0.0.0 的参数,从而导致错误。这可以解释您遇到问题的原因。

我最初尝试使用您的 Command 结构重新创建问题,但遇到了一些问题。有效的是通过以下方式使用Command

"Command": "/bin/bash -c \"mkdir -p /tmp && axel https://example.com/models.zip -o /tmp/models.zip\""

我的Dockerfile 没有Entrypoint。因此,要运行您的 python,您可以执行以下操作(假设其他所有内容都正确):

"Command": "/bin/bash -c \"mkdir -p /tmp && axel https://example.com/models.zip -o /tmp/models.zip && python3 -m flask run --host=0.0.0.0\""

【讨论】:

【参考方案2】:

你有 Dockerfile 内容吗? 很可能他们的ENTRYPOINT 脚本没有接收到参数,或者忽略了它。

你可以做的类似于this。

你有一个入口点脚本,它接收作为参数传入 aws.json 的命令,执行它,然后调用你真正的 python 命令。

或者你可以用类似这样的东西替换你的ENTRYPOINT

ENTRYPOINT ["/bin/bash"]

你的默认命令是:

CMD ["python3 ..."]

这样在本地运行时只运行python3命令。

如 Marcin 所述,在 aws 中运行时,您可以更改命令并将 python 附加到末尾。两种情况都有效

【讨论】:

在我的Dockerfile 中,我有:ENTRYPOINT python3 -m flask run --host=0.0.0.0 但我想在 ENTRYPOINT 之前运行 Command 我编辑了我的答案。基本上你可以覆盖入口点来执行之前的命令。 那么在我的Dockerfile 中,我应该将我的ENTRYPOINT 更改为某个shell 脚本,然后在我的Dockerfile.aws.json 中,我应该有"Command": "--deploy"

以上是关于如何获取命令以从 Elastic Beanstalk 上的 Dockerfile.aws.json 运行?的主要内容,如果未能解决你的问题,请参考以下文章

如何获取数据以从 NSURLSessionDataTask 返回

脚本如何获取上次备份以从 AZURE 还原

如何创建函数以从 WCF Rest 获取数据然后显示到表格

如何修改 Angular 组件以从后端获取信息?

如何获取 asp.net 身份以从​​数据库中获取对声明的更改?

运行查询以从大查询中获取事件计数