Как получить команду для запуска из файла Dockerfile. aws. json на Elasti c Beanstalk? - PullRequest
2 голосов
/ 09 июля 2020

У меня есть 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, который я указал. Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 10 июля 2020

Если у вас есть ENTRYPOINT в вашем Dockerfile, то Command добавляется в качестве аргументов :

Укажите команду для выполнения в контейнере. Если вы указываете точку входа, тогда команда добавляется как аргумент в точку входа . Для получения дополнительной информации см. CMD в документации Docker.

Таким образом, ваша команда 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\""
1 голос
/ 10 июля 2020

У вас есть содержимое Dockerfile? Скорее всего, ваш сценарий ENTRYPOINT не получает параметры или игнорирует их.

То, что вы можете сделать, похоже на this .

У вас есть сценарий точки входа, который получает команду, переданную в aws. json в качестве параметра, выполняет ее и затем вызывает вашу настоящую команду python.

Или вы можете заменить свой ENTRYPOINT чем-то похожим на это :

ENTRYPOINT ["/bin/bash"]

и ваша команда по умолчанию будет:

CMD ["python3 ..."]

Таким образом, при локальном запуске вы запускаете только python3 command.

При запуске в aws вы можете изменить свою команду и добавить python в конец, как упоминал Марчин. Оба случая работают

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...