我正尝试将我的应用程序(代码,Dockerfile和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
当我运行此映像时,似乎top
中缺少dockerd尚未启动; docker ps
报告“无法通过unix:///var/run/docker.sock连接到Docker守护程序。Docker守护程序是否正在运行?
“。但是,如果我这样做了service docker start
,则返回“ *警告:泊坞窗已经启动”。要使Docker在Alpine容器中正常工作,我需要做些特别的事情吗?
答案 0 :(得分:2)
Docker由运行所有服务的docker守护程序和用于与守护程序进行交互的CLI组成(好的,还有很多其他部分,但这是最重要的)。不管您从java.time
命令收到什么消息,安装java.time
都不会安装守护程序。
要在容器内使用docker-compose
,必须使用service
图片。它称为docker
。从中继承(而不是docker-in-docker
)并享受。
但是在阅读this article之前,这解释了为什么它不是一个好主意,以及在容器内部使用docker的其他方法是什么(提示:您可以通过挂载{{1}从容器内部调用主机的docker守护程序}套接字)。
答案 1 :(得分:2)
如grapes answer所述,如果您不能或不想从docker:dind
继承,则可以选择使用alpine
作为基础图像,并且安装Docker CLI和Docker Compose。
为使映像较小,可以在安装Docker Compose之后删除一些依赖项:
FROM alpine:3.11
RUN apk update && \
apk add --no-cache docker-cli python3 && \
apk add --no-cache --virtual .docker-compose-deps python3-dev libffi-dev openssl-dev gcc libc-dev make && \
pip3 install docker-compose && \
apk del .docker-compose-deps
此映像不包含Docker Engine,必须通过从主机挂载/var/run/docker.sock
来使用Docker-in-Dcoker方法
docker run -v /var/run/docker.sock:/var/run/docker.sock <image name>
答案 2 :(得分:0)
你可以运行这个来获取 docker-compose
apk update && apk add --no-cache --virtual docker-cli python3 .docker-compose-deps python3-dev libffi-dev openssl-dev gcc libc-dev make python3 py3-pip py-pip curl libffi-dev openssl-dev gcc libc-dev rust cargo make
pip install docker-compose