非root用户管理Docker

Docker守护进程绑定到Unix的socket,而不是TCP端口,默认这个Unix socket属于root用户,其他用户只能通过sudo使用。Docker守护进程永远以root用户运行。

如果不想在docker命令前加sudo,创建一个Unix组叫做docker,并向其中添加用户。当Docker守护进程启动后,就创建一个Unix socket,docker组中的用户可以访问。

创建docker组并添加用户

  1. 创建docker

    sudo groupadd docker
    
  2. 添加用户到docker

    sudo usermod -aG docker $USER
    
  3. 注销并重新登陆,以重新加载你的组员备份

    如果是在虚拟机上测试,可能必须重启虚拟机。

    在桌面Linux环境(如 X Windows)中,完全退出会话,然后重新登陆。

    在Linux中,也可以运行下面命令以重新激活改变的组。

    newgrp docker
    
  4. 验证不添加sudo也不执行docker命令

    docker run hello-world
    

    此命令下载测试映像并在容器中运行。当容器运行时,它打印一条消息并退出。

    如果在将用户添加到Docker组之前最初使用sudo运行Docker CLI命令,您可能会看到以下错误,这表明目录~/.docker/被错误的权限创建,因为使用sudo命令

    WARNING: Error loading config file: /home/user/.docker/config.json -
    stat /home/user/.docker/config.json: permission denied
    

    为修复此问题,移除这个目录(此目录自动创建,但任何自定义设置已丢失)或者使用下面的命令,修改它的所有权和权限:

    sudo chown "$USER":"$USER" /home/"$USER"/.docker -R
    sudo chmod g+rwx "$HOME/.docker" -R
    

配置Docker开机启动

大多数当前的Linux发行版(RHEL、CentOS、Fedora、Debian、Ubuntu 16.04及更高版本)都使用systemd来管理系统启动时启动的服务。在Debian和Ubuntu上,Docker服务默认配置为启动时启动。要在引导其他发行版时自动启动Docker和Container,请使用以下命令:

sudo systemctl enable docker.service
sudo systemctl enable containerd.service

使用disable禁用这种行为

sudo systemctl disable docker.service
sudo systemctl disable containerd.service

如果需要添加HTTP代理,请为Docker运行时文件设置不同的目录或分区,或进行其他自定义,参见:customize your systemd Docker daemon options.

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐