Tin*_*yen 8 daemon heroku docker dind
为什么?
我正在尝试创建一个通用解决方案,用于在 Heroku 上运行 docker-compose。我想通过使用 Heroku Button 部署来制作一键部署解决方案。这样,用户不需要任何 git、Heroku cli 和 docker 知识。
问题。
码头工人和码头工人守护进程只可当我设置stack到container。有一些 buildpack 可以为您提供 docker 和 docker-compose CLI,但没有 docker 守护程序,您将无法运行 docker 映像。所以构建包将不起作用。
随着stack设置为container我可以使用文件heroku.yml(文章)。在那里我定义了我的流程。(它取代了Procfile。如果我仍然将 a 添加Procfile到我的项目中,它将什么也不做。)
我还可以定义一个Dockerfilethere 来构建我的 docker 映像。
但是,当我运行 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.
Run Code Online (Sandbox Code Playgroud)
问题出在 Docker 容器内部,Docker 守护进程没有运行。对此的解决方案是挂载它:
docker run -v /var/run/docker.sock:/var/run/docker.sock ...
并且由于您无法使用Procfile我无法运行该命令。(见上文heroku.yml替换Procfile。)如果我使用的是 buildpack,我可以使用Procfile但 docker 守护进程不会运行.....
我尝试VOLUME在其中定义一个Dockerfile,但问题仍然存在。此外,一篇 heroku 文章说“不支持卷挂载。dyno的文件系统是短暂的。”
在 Heroku 上可以运行 docker 镜像。我正在努力的是在 docker 镜像中运行一个 docker。
通过挂载在 docker 映像中运行 docker 可以在我的 VPS 上正常工作,/var/run/docker.sock但这不能(?)在 Heroku 上完成。
最后的话:我正在努力使这项工作顺利进行,以便其他人即使不熟悉 git、heroku cli 和 docker 也可以轻松部署软件解决方案。
不幸的是,你的问题的答案是:还没有。
出于安全原因,Heroku 不向用户提供运行特权容器的能力,因为容器可以访问主机功能。该文档非常清楚您的限制,例如:没有--priviledged容器,也没有root用户,没有VOLUMES并且磁盘是短暂的。
在考虑了 DinD 图像后,我得出的结论是,尝试在 Heroku 容器内运行 Docker 并不是正确的选择和设计。我非常确定您想要实现的目标与 Heroku 向用户提供的目标非常接近。提供一个平台或应用程序,让非开发人员只需一个按钮即可推送和部署应用程序,这在很多方面都是非常有趣的。这可以通过使用其平台 API 的应用程序来完成。在这种情况下,Web 应用程序(在 Heroku 上运行)可能无法(据我所知)能够执行您想要的操作。相反,您需要嵌入桌面应用程序:git、docker 和您的应用程序,用于解析、验证、构建应用程序/组件并将其推送到 Heroku 的容器注册表。
最后,如果您仍然认为需要 DinD 解决方案,那么使用 VPS 的主要解决方案是目前唯一的解决方案。但请注意,它可能会给您的系统带来安全漏洞,并且在尝试限制这些安全门时,您可能会提供类似于 Heroku 的服务。
| 归档时间: |
|
| 查看次数: |
1647 次 |
| 最近记录: |