为什么?
我正在尝试创建一个通用解决方案,以在Heroku上运行docker-compose。我希望通过使用Heroku Button部署实现一键部署解决方案。这样,用户不需要任何git、Heroku cli和docker的知识。
问题所在。
只有当我将“stack”设置为“container”时,才能使用Docker和docker守护程序。有些构建包可以提供给你docker和docker-compose CLI,但是没有docker守护程序,你无法运行docker镜像。因此,构建包不能工作。 将“stack”设置为“container”后,我可以使用文件“heroku.yml”(article)。在其中,我定义了我的进程。(它替换了“Procfile”。如果我仍然向我的项目添加“Procfile”,它将无效。) 我还可以在那里定义一个“Dockerfile”来构建我的docker镜像。 然而,当我运行docker镜像时,会弹出以下错误:
问题在于Docker容器内没有运行Docker守护进程。解决方法是挂载它:
由于您不能使用
我正在尝试创建一个通用解决方案,以在Heroku上运行docker-compose。我希望通过使用Heroku Button部署实现一键部署解决方案。这样,用户不需要任何git、Heroku cli和docker的知识。
问题所在。
只有当我将“stack”设置为“container”时,才能使用Docker和docker守护程序。有些构建包可以提供给你docker和docker-compose CLI,但是没有docker守护程序,你无法运行docker镜像。因此,构建包不能工作。 将“stack”设置为“container”后,我可以使用文件“heroku.yml”(article)。在其中,我定义了我的进程。(它替换了“Procfile”。如果我仍然向我的项目添加“Procfile”,它将无效。) 我还可以在那里定义一个“Dockerfile”来构建我的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.
问题在于Docker容器内没有运行Docker守护进程。解决方法是挂载它:
docker run -v /var/run/docker.sock:/var/run/docker.sock ...
由于您不能使用
Procfile
,因此无法运行该命令。(请参见上面的heroku.yml
替换了Procfile
)。如果我正在使用构建包,则可以使用Procfile
,但Docker守护程序将不会运行......
我尝试在Dockerfile
中定义VOLUME
,但问题仍然存在。此外,Heroku文章说“不支持卷挂载。 Dyno的文件系统是短暂的。”
在Heroku上可以运行Docker镜像。我遇到的问题是在Docker镜像中运行Docker。
通过挂载/var/run/docker.sock
,在我的VPS上可以很好地运行Docker镜像,但在Heroku上无法(?)完成。
最后一句话: 我正在努力使这项工作正常,以便其他人即使不熟悉git、heroku cli和docker也可以轻松部署软件解决方案。
DOCKER_HOST
指定了位置,并尝试了不同的URL,包括你提到的那个。我还尝试了/var/run/docker.sock
。如果您能在Heroku上创建一个最小的DinD hello world示例,我将不胜感激。 - Tin Nguyen--privileged
容器。当在本地工作时,DinD非常好用,但是当被推到Heroku时,dockerd
会回答您需要一个root(或拥有特权的)用户来启动守护程序。因此,您可能想要使用无根docker镜像,例如docker:stable-dind-rootless(https://hub.docker.com/_/docker)。我尝试了一下,但是没有找到可行的解决方案,也不能花更多时间在这上面了。希望您可以找到解决办法 :) - Folkvir