为什么? 我正在尝试创建一个在Heroku上运行docker-compose的通用解决方案。我想通过使用Heroku Button部署来制作一键式部署解决方案。这样,用户不需要任何git,Heroku cli和docker的知识。
问题。
Docker和docker守护程序仅在我将stack
设置为container
时可用。有一些buildpacks可以为您提供docker和docker-compose CLI,但是如果没有docker守护程序,您将无法运行docker镜像。所以buildpacks不起作用。
随着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
。)如果我使用的是buildpack,我可以使用Procfile
但是docker守护进程不会运行.....
我尝试在VOLUME
中定义一个Dockerfile
并且问题仍然存在。此外,一篇文章称"Volume mounting is not supported. The filesystem of the dyno is ephemeral."
在Heroku上可以运行泊坞窗图像。我正在努力的是在docker图像中运行一个docker。
通过安装/var/run/docker.sock
在docker镜像中运行docker在我的VPS上工作正常,但这不能(?)在Heroku上完成。
最后一句话:我正在努力使这项工作能够让其他人轻松部署软件解决方案,即使他们对git,heroku cli和docker不太满意。
我做的是将它安装在我的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这对我来说效果很好。