从 docker 开始 docker - 无法连接到守护进程

Start docker from docker - Can't connect to daemon

我正在尝试从 docker 容器中启动一个 docker 容器。我发现了多篇关于这个问题的帖子,但不是针对这个特定案例的。到目前为止我发现的是,我需要在容器中安装 docker 并将主机 /var/run/docker.sh 挂载到容器的 /var/run/docker.sh.
但是我得到错误:

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? My 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 代码中 运行ning 的命令:

// 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 守护进程?我需要包括其他东西吗?我尝试 运行 Go 命令作为 sudo,但正如预期的那样:

exec: "sudo": executable file not found in $PATH

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

exec: "service": executable file not found in $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