我正尝试将我的应用程序(代码、Dockerfiles和一个Docker-compose脚本)捆绑在一个映像中,以便于部署(入口点仅为docker-compose up
)。
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守护进程。Docker守护进程是否正在运行?“。如果我执行service docker start
,则返回“* 警告:Docker已经开始了”。有什么特别的我需要做的让Docker工作的一面阿尔卑斯山集装箱?
4条答案
按热度按时间jtjikinw1#
如果您无法或不想继承
docker:dind
(如grapesanswer中所述),则可以选择使用alpine
作为基础映像并安装Docker CLI和Docker Compose。为了保持映像较小,可以在Docker Compose安装后删除某些依赖项:
此映像不包含Docker引擎,必须通过从主机装载
/var/run/docker.sock
来使用Docker-in-Dcoker方法ajsxfq5m2#
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守护进程)。5m1hhzi43#
您可以运行此命令以获取docker-compose
taor4pac4#
Docker是一个客户端-服务器应用程序。它有Docker客户端(
docker
二进制)和Docker守护进程(dockerd
)之所以会出现此错误,是因为您只安装了Docker客户端,而没有在Dockerfile中安装Docker守护进程。
要解决此问题,您有以下几种选择:
我写了如何create docker in docker agent image,你也可以在那里看到这个例子。