我试图将我的应用程序(代码,Dockerfiles和docker-compose脚本)捆绑在一个图像中以便于部署(入口点只是docker-compose up
)。我的顶级应用程序图像的Dockerfile看起来像这样
FROM alpine:latest
COPY . /app
RUN apk update && apk add --no-cache docker py-pip openrc && pip install docker-compose
当我运行这个图像时,似乎dockerd还没有启动,缺少top
的结果; docker ps
报告“无法在unix:///var/run/docker.sock上连接到Docker守护程序。泊坞守护程序是否正在运行?”。但是,如果我做service docker start
,则返回“*警告:docker已经开始”。为了让Docker在Alpine容器上工作,我需要做些什么特别的事情吗?
Docker包含运行所有服务的docker守护进程和用于与守护进程交互的CLI(好的,还有很多其他部分,但这些是最重要的)。无论您从docker-compose
命令获得什么消息,安装service
都不会安装守护程序。
要在容器内使用docker
,您必须使用docker-in-docker
图像。它被称为docker:dind
。继承它(而不是alpine
)并享受。
但在阅读this article之前,这解释了为什么它不是一个好主意,以及在容器内使用docker的其他方法是什么(提示:你可以通过安装/var/run/docker.sock:/var/run/docker.sock
套接字从容器内部调用主机的docker守护进程)。