Почему?
Я пытаюсь создать универсальное решение для запуска docker-compose на Heroku.Я хочу создать решение для развертывания в один клик с помощью развертывания Heroku Button.Таким образом, пользователю не нужны никакие знания о git, Heroku cli и docker.
Проблема.
Docker и демон docker доступны, только когда я установил stack
на container
.Существуют buildpack-пакеты, которые предоставляют docker и docker-compose CLI, но без демона docker вы не сможете запустить образ docker.Поэтому buildpacks не будут работать.
Если для stack
установлено значение container
, я могу использовать файл heroku.yml
( article ).Там я определяю свои процессы.(Он заменяет Procfile
. Если я все еще добавлю Procfile
в свой проект, он ничего не будет делать.)
Я также могу определить Dockerfile
там, чтобы построить мой образ докера.
Когда я, однако, запускаюВ образе Docker появляется следующая ошибка:
2019-02-28T15:32:48.462101+00:00 app[worker.1]: Couldn't connect to Docker daemon at http+docker://localhost - is it running?
2019-02-28T15:32:48.462119+00:00 app[worker.1]:
2019-02-28T15:32:48.462122+00:00 app[worker.1]: If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable.
Проблема в контейнере Docker, демон Docker не работает.Решением этой проблемы является его монтирование:
docker run -v /var/run/docker.sock:/var/run/docker.sock ...
И поскольку вы не можете использовать Procfile
, я не могу выполнить эту команду.(См. Выше heroku.yml
заменяет Procfile
.) И если бы я использовал buildpack, я мог бы использовать Procfile
, но демон docker не работал бы .....
Я попытался определить VOLUME
в пределах Dockerfile
и проблема не устранена.Кроме того, в статье на heroku говорится: «Монтирование тома не поддерживается. Файловая система динамометра эфемерна».
В Heroku можно запустить образ докера.То, с чем я борюсь, это запуск докера в образе докера.
Запуск докера в образе докера прекрасно работает на моем VPS, монтируя /var/run/docker.sock
, но это невозможно (?) На Heroku.
Последнееслова: я пытаюсь сделать так, чтобы другие люди могли легко развернуть программное решение, даже если им не нравятся git, heroku cli и docker.