当前位置: 首页 > 知识库问答 >
问题:

如何让docker容器基于从头开始访问 /var/run/docker.sock

伏德义
2023-03-14

我想在主机上使用Docker套接字,从Go代码运行在基于scratch的容器中。

Dockerfile如下所示:


    FROM golang:1.12.4-alpine3.9 as builder

    RUN mkdir /user && \
        echo 'nobody:x:65534:65534:nobody:/:' > /user/passwd && \
        echo 'nobody:x:65534:' > /user/group

    RUN apk add --no-cache ca-certificates git

    WORKDIR /src

    COPY go.mod ./
    RUN go mod download

    COPY . .
    RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .

    FROM scratch as final

    COPY --from=builder /user/group /user/passwd /etc/
    COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
    COPY --from=builder /src/app /app
    COPY --chown=nobody:nobody data /.local

    USER nobody:nobody

    ENTRYPOINT ["/app"]

docker服务本身包括一个用于var/run/docker的挂载。袜子

docker service inspect的输出:


  "Mounts": [
        {
            "Type": "bind",
            "Source": "/var/run/docker.sock",
            "Target": "/var/run/docker.sock"
        }
    ],

我尝试过的事情:

>

  • 触摸/var/run/docker。在生成器上单击并复制--chown=nobody:nobody--from=builder/var/run/var/run

    不同的用户(我拒绝以root身份运行。这是一种糟糕的做法)。

    将final中的nobody添加到docker组。

    编辑:

    在这种配置下,我得到以下错误,因为任何人作为用户都没有访问/var/run/docker的权限。插座

    尝试连接到位于的Docker守护程序套接字时,权限被拒绝unix:///var/run/docker.sock:收到http:///var/run/docker.sock/v1.25/services:拨打unix/var/run/docker。sock:连接:权限被拒绝

  • 共有1个答案

    云文栋
    2023-03-14

    要与docker守护程序通信,您需要以root(或sudo)身份运行命令,或者您的用户必须是docker组的成员。

    为了从非root用户(无sudo)使用它,您需要在容器内创建docker组,并将您的用户添加到该组中。注意:容器中的docker组必须与主机上的实际docker组具有相同的GID。

     类似资料:
    • 我正在将当前的Jenkins服务器转换为实现Docker。按照github https://github.com/jenkinsci/docker上的指南,我成功地使用以下命令启动了jenkins: docker Run-P 8080:8080-P 50000:50000-V Jenkins_Home://var/Jenkins_Home Jenkins/Jenkins:LTS 我不确定如何通过文

    • 问题内容: 我有一个运行詹金斯的码头集装箱。作为构建过程的一部分,我需要访问在主机上本地运行的Web服务器。是否可以将主机Web服务器(可以配置为在端口上运行)暴露给jenkins容器? 编辑:我正在Linux机器上本地运行docker。 更新: 除了下面的@larsks答案之外,要从主机获取主机IP的IP地址,我还要执行以下操作: 问题答案: 在Linux上本地运行Docker时,您可以使用接口

    • 我有一个docker容器在运行Jenkins。作为构建过程的一部分,我需要访问在主机上本地运行的web服务器。有没有一种方法可以将主机web服务器(可以配置为在端口上运行)公开给jenkins容器? 编辑:我正在Linux机器上原生运行docker。 更新: 除了@larsks下面的答案之外,要从主机获取主机IP的IP地址,我还做了以下操作:

    • 问题内容: 我基于两个不同的图像创建了两个docker容器。一个数据库,另一个用于网络服务器。这两个容器都在我的Mac OS X上运行。 我可以从主机访问数据库容器,也可以从主机访问Web服务器。 但是,如何从Web服务器访问数据库连接? 我启动数据库容器的方式是 我开始了wls容器作为 我可以通过连接到主机上的数据库 我可以以以下方式访问主机上的wls: 问题答案: 最简单的方法是使用–link

    • 我基于两个不同的映像创建了两个docker容器。一个是db,另一个是WebServer。这两个容器都在我的mac OSX上运行。 我可以从主机访问db容器,也可以从主机访问webserver。 我可以访问主机上的wls作为

    • 问题内容: 我正在尝试为将我的应用程序容器连接到postgres容器提供一个便携式解决方案。“便携式”是指我可以给用户两个命令,每个容器一个,它们将始终协同工作。 我的本地PC上运行着一个postgres docker容器,我这样运行它, 我可以使用address从python flask应用程序访问它。 我也将python应用程序也放置在docker容器中,但无法连接到postgres容器。 地