如何在没有 sudo 的情况下在 ubuntu 上运行 docker

时间:2021-01-29 13:15:36

标签: docker ubuntu

我想通过运行以下命令来运行我的 docker:

docker build -t getting-started .

我收到以下错误:

<块引用>

尝试连接到 unix:///var/run/docker.sock 上的 Docker 守护进程套接字时被拒绝:发布 http://%2Fvar%2Frun%2Fdocker.sock/v1.24/build?buildargs =%7B%7D&cachefrom=%5B%5D&cgroupparent=&cpuperiod=0&cpuquota=0&cpusetcpus=&cpusetmems=&cpushares=0&dockerfile=Dockerfile&labels=%7B%7D&memory=0&memswap=0&networkmode=default&rm=1&ts=&version=target&version=&version=getssize=u拨 unix /var/run/docker.sock: 连接:权限被拒绝

我的问题是:如何在不添加“sudo”的情况下在 ubuntu 上运行 docker?

2 个答案:

答案 0 :(得分:1)

您应该将用户添加到 docker 组:

sudo usermod -aG docker $USER

在您可能需要重新启动 Ubuntu 之后

答案 1 :(得分:0)

TL;DR:与网络上的许多教程建议的不同(将您的用户帐户添加到 docker 组,这是有风险的!见下文),您只需添加一个别名在您的 .bashrc 中避免输入 sudo,同时具有“密码提示保护”。

更准确地说:Docker守护进程套接字归root:docker所有:

$ ls -l /var/run/docker.sock
srw-rw---- 1 root docker 0 janv. 28 14:23 /var/run/docker.sock

因此,使用此默认设置,您需要在所有 docker CLI 命令之前添加 sudo

为避免这种情况,您可以:

  1. $USER 添加到 docker 组(但在您的个人工作站上执行此操作非常冒险,因为这相当于 为您的用户帐户提供 root 权限,而没有任何sudo 密码提示或审核).

    另请参阅官方 Docker 文档中的此页面:
    https://docs.docker.com/engine/security/#docker-daemon-attack-surface

  2. 或者,为了自动添加 sudo 但避免手动输入 sudo docker,一个好的做法是在您的 ~/.bashrc 文件中添加以下别名(参见例如 {{3}详情):

    __docker() {
        if [[ "${BASH_SOURCE[*]}" =~ "bash-completion" ]]; then
            docker "$@"
        else
            sudo docker "$@"
        fi
    }
    alias docker=__docker
    

    然后你可以通过打开一个新终端并输入:

    $ docker run --rm -it debian:10  # asks your password
    $ \docker run --help  # does not ask your password thanks to '\'