ERROR: Could not connect to Docker daemon at http+docker://localhost - is it running?

ERROR: Could not connect to Docker daemon at http+docker://localhost - is it running?

这是我的docker文件


FROM ubuntu:latest

RUN apt-get update \
    && apt-get install -y git

RUN mkdir api 

WORKDIR ./api

RUN git clone --branch develop https://link

WORKDIR ./api/api/


RUN apt-get install -y docker.io
RUN apt-get -y install curl


RUN curl -L "https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m)"  -o /usr/local/bin/docker-compose
RUN mv /usr/local/bin/docker-compose /usr/bin/docker-compose
RUN chmod +x /usr/bin/docker-compose



RUN docker-compose up 


我想 docker-在 docker 图像 中合成。然而,

它给出 错误:无法连接到位于 http+docker://localhost 的 Docker 守护程序 - 是 运行 吗?如果它位于非标准位置,请使用 DOCKER_HOST 环境变量指定 URL

我如何解决这个问题我 搜索了 但 none 有效?

我建议重新考虑这个 Docker 文件的整个方法:你不能 运行 Docker 守护程序在 Docker 文件中,你可以'不要启动任何类型的后台进程。主机上 运行 的 shell 脚本可能更匹配。

运行 Docker 文件中的任何类型的守护进程大多不起作用;在每个 RUN 指令结束时,所有 运行ning 进程都将终止。创建 Docker 映像不会保留任何 运行ning 进程,仅保留最终文件系统和元数据,例如启动容器时默认的 CMD 到 运行。因此,即使 docker-compose up 有效,其结果也不会保留在您的图像中。

运行 Docker 容器内的 Docker 守护进程很困难,通常不鼓励。 (共享主机的 Docker 套接字具有重大的安全隐患,但这是首选方法。)无论哪种方式都需要一些额外的权限,这在 Docker 文件中同样不可用。

这里对我来说另一个危险信号是 RUN git clone 行。由于 Docker 的层缓存,很高兴说 "oh, I've already RUN git clone so I don't need to repeat that step" 并且您不会以当前代码结束。将远程 git 存储库的凭据输入 Docker 文件也很棘手。我还建议 运行ning 源代码控制命令专门用于主机而不是 Docker 文件。

此处的标准方法是将 docker-compose.yml 文件提交到存储库的顶部,并直接从主机提交 运行 git clonedocker-compose up。您不能将 Docker 文件用作通用自动化工具。