我正在尝试从 docker 容器内部启动一个 docker 容器。我发现了多个有关此问题的帖子,但不适用于此特定情况。到目前为止我发现的是,我需要在容器中安装 docker,并将主机 /var/run/docker.sh 挂载到容器的 /var/run/docker.sh。
但是我得到了错误:
无法连接到 unix:///var/run/docker.sock 上的 Docker 守护程序。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 daemon?我需要包含其他内容吗?我尝试将 Go 命令作为 sudo 运行,但正如预期的那样:
exec: "sudo": $PATH 中找不到可执行文件
我试图将 Dockerfile 中的用户更改为 root,这并没有改变任何东西。我也无法在容器本身上启动 docker 守护进程:
exec:“服务”:在 $PATH 中找不到可执行文件
我是否误解了某些内容,或者我是否需要在 Dockerfile 中包含其他内容?实在想不通,多谢帮助!