如何在Elastic Beanstalk上从Dockerfile.aws.json运行命令



我有一个DockerfileDockerfile.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。我做错了什么?

如果Dockerfile中有ENTRYPOINT,则Command会被附加为其参数:

指定要在容器中执行的命令。如果指定Entrypoint,则Command将作为参数添加到Entrypoint。有关更多信息,请参阅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""

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

你能做的事情与此类似。

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

或者你可以用类似的东西来代替你的ENTRYPOINT

ENTRYPOINT ["/bin/bash"]

默认命令为:

CMD ["python3 ..."]

这样,当在本地运行时,您只能运行python3命令。

在aws中运行时,您可以更改Command并将python附加到末尾,正如Marcin所提到的。两种情况都适用

最新更新