问题描述
我正在尝试从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