Сбой образа Docker в heroku

#python #docker #heroku

#python #docker #героку

Вопрос:

Недавно я опубликовал инструмент для тестирования SSHFP с открытым исходным кодом в качестве Dockerized контейнера (https://github.com/dbsentry/sshfp ). Инструмент работает в docker и podman. Я также настраиваю действия github для создания контейнера docker и отправляю его в docker hub каждый раз, когда какой-либо файл передается в репозиторий.

Инструмент в основном представляет собой flask API в бэкэнде и приложение Vue в качестве интерфейса. REST API запускается с помощью gunicorn, а Vue обслуживается с помощью nginx.

Для демонстрации я использую Heroku. Однако каждый раз я нажимал и освобождал контейнер для Heroku, используя следующие команды:

 [manish@getafix2 bin]$ docker tag dbsentry/sshfp registry.heroku.com/sshfp/web
[manish@getafix2 bin]$ docker push registry.heroku.com/sshfp/web
The push refers to repository [registry.heroku.com/sshfp/web]
fa59c99d6036: Layer already exists 
ace0eda3e3be: Layer already exists 
latest: digest: sha256:824a5303c9b6a3e9b3f1bc1df19a9833f150c2a563d57abcf27e0b800083f6ad size: 740
[manish@getafix2 bin]$ ./heroku container:release web -a sshfp
Releasing images web to sshfp... done
[manish@getafix2 bin]$ 
 

Однако каждый раз, когда я это делал, это приводило к сбою со следующими сообщениями:

 2020-12-02T17:38:04.365087 00:00 app[api]: Deployed web (9b27af0ae5e8) by user manish@dbsentry.com
2020-12-02T17:38:04.365087 00:00 app[api]: Release v21 created by user manish@dbsentry.com
2020-12-02T17:38:05.138252 00:00 heroku[web.1]: State changed from crashed to starting
2020-12-02T17:38:07.656483 00:00 heroku[web.1]: Starting process with command `/container/tools/run`
2020-12-02T17:38:10.642322 00:00 app[web.1]: *** CONTAINER_LOG_LEVEL = 3 (info)
2020-12-02T17:38:10.645157 00:00 app[web.1]: *** In finally
2020-12-02T17:38:10.645343 00:00 app[web.1]: *** Killing all processes...
2020-12-02T17:38:10.726301 00:00 heroku[web.1]: Process exited with status 0
2020-12-02T17:38:10.780523 00:00 heroku[web.1]: State changed from starting to crashed
 

Сначала я подумал, что это может происходить из-за того, что Heroku не позволяет вам жестко кодировать порт. Итак, я изменил конфигурацию nginx и установил конфигурацию nginx для переменной среды PORT.

Я попытался отследить выполнение run скрипта, но не смог этого сделать.

Любая помощь в выполнении этого запуска в Heroku будет высоко оценена.

Ответ №1:

Итак, оказывается, Heroku ожидает, что пользователь, не являющийся пользователем root, будет запускать все процессы внутри контейнера. Мой инструментарий предполагает пользователя root, который запускает runit, а затем меняет пользователя для каждого процесса (как это делает обычная система Linux). Итак, мне нужно переработать мой инструментарий для изображений Docker, чтобы он также мог запускаться от имени пользователя, не являющегося пользователем root.