从docker启动docker-无法连接到守护进程

问题描述

我正在尝试从Docker容器内部启动Docker容器。我找到了多个有关此问题的帖子,但不适用于此特定情况。我到目前为止发现的是,我需要在容器中安装docker并将主机/var/run/docker.sh安装到容器的/var/run/docker.sh。
但是我得到了错误

无法通过unix:///var/run/docker.sock连接到Docker守护程序。泊坞窗守护程序正在运行吗? 我的Dockerfile:

FROM golang:alpine as builder
RUN mkdir /build
ADD . /build/
workdir /build
RUN go build -o main .
FROM alpine
RUN adduser -S -D -H -h /app appuser
RUN apk update && apk add --no-cache docker-cli
copY --from=builder /build/main /app/
workdir /app
USER root
ENTRYPOINT [ "/app/main" ]

我从Go代码运行的命令:

// Start a new docker
cmd := exec.Command("docker","ps") // Changed to "ps" just as a quick check
cmd.Run()

运行我用来启动第一个Docker容器的命令

docker run --privileged -v /var/run/docker.sh:/var/run/docker.sh firsttest:1.0

为什么容器无法连接到docker守护程序?我需要添加其他内容吗?我试图以sudo的身份运行Go命令,但还是符合预期:

exec:“ sudo”:在$ PATH中找不到可执行文件

我尝试将Dockerfile中的用户更改为root,这没有任何改变。另外,我无法在容器本身上启动docker守护进程:

exec:“服务”:在$ PATH中找不到可执行文件

我是否误解了某些内容,还是需要在Dockerfile中包含其他内容?我真的不明白,谢谢您的帮助!

解决方法

我不确定您为什么要在Docker容器中运行Docker,除非您是Docker开发人员。当我想做这样的事情时,我正在尝试解决某种基础架构问题,并且应该首先解决该问题。

如果您确实要这样做,可以将/var/run/docker.sock挂载到您的容器中:

docker run --privileged -v /var/run/docker.sh:/var/run/docker.sh -v /var/run/docker.sock:/var/run/docker.sock firsttest:1.0