Как мне запустить Docker в Docker на Heroku? - PullRequest
0 голосов
/ 28 февраля 2019

Почему?
Я пытаюсь создать универсальное решение для запуска 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.

1 Ответ

0 голосов
/ 28 февраля 2019

Что я сделал, так это установил его в свой dockerfile так:

RUN curl -fsSLO https://get.docker.com/builds/Linux/x86_64/docker-17.04.0-ce.tgz \
  && tar xzvf docker-17.04.0-ce.tgz \
  && mv docker/docker /usr/local/bin \
  && rm -r docker docker-17.04.0-ce.tgz

Затем в разделе args для запуска docker я добавил это:

args '--user root -v /var/run/docker.sock:/var/run/docker.sock'

Для дальнейшего объяснения попочему это работает, см. stackoverflow.com / q / 27879713/354577 Хотя это хорошо работает для меня.

...