为什么我在OS X上必须使用sudo来运行Docker?

9

我正在尝试在macOS 10.12.1上安装docker

我曾经安装过旧版本的docker并已将其删除。

• 我决定使用Docker for Mac环境并利用hyperkit

• 我没有正在使用的任何容器

• 我已经干净地安装了本机应用程序,并且设置显示它正在正确运行

问题:以标准用户身份运行docker ps失败

➜ docker ps
Cannot connect to the Docker daemon. Is the docker daemon running on this host?

成功:

➜ sudo docker ps
Password:
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

问题:

如何避免需要以root权限运行?

附加信息

➜  bin ls -all | grep docker
lrwxr-xr-x    1 jmurphy  staff      67 Oct 29 21:43 docker -> /Users/jmurphy/Library/Group Containers/group.com.docker/bin/docker
lrwxr-xr-x    1 jmurphy  staff      75 Oct 29 21:43 docker-compose -> /Users/jmurphy/Library/Group Containers/group.com.docker/bin/docker-compose
lrwxr-xr-x    1 jmurphy  staff      75 Oct 29 21:43 docker-machine -> /Users/jmurphy/Library/Group Containers/group.com.docker/bin/docker-machine
lrwxr-xr-x    1 jmurphy  admin      75 Oct 29 20:50 docker-machine-driver-xhyve -> ../Cellar/docker-machine-driver-xhyve/0.2.3/bin/docker-machine-driver-xhyve
lrwxr-xr-x    1 jmurphy  staff      67 Oct 29 21:43 notary -> /Users/jmurphy/Library/Group Containers/group.com.docker/bin/notary


➜  bin ps aux | grep docker
jmurphy            815   0.5  1.2  4742256 103108   ??  S     9:43PM   0:22.64 /Applications/Docker.app/Contents/MacOS/com.docker.hyperkit -A -m 2G -c 2 -u -s 0:0,hostbridge -s 31,lpc -s 2:0,virtio-vpnkit,uuid=58fa3bf4-bc44-4df1-b637-b459084abef7,path=/Users/jmurphy/Library/Containers/com.docker.docker/Data/s50,macfile=/Users/jmurphy/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/mac.0 -s 3,virtio-blk,file:///Users/jmurphy/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2,format=qcow -s 4,virtio-9p,path=/Users/jmurphy/Library/Containers/com.docker.docker/Data/s40,tag=db -s 5,virtio-rnd -s 6,virtio-9p,path=/Users/jmurphy/Library/Containers/com.docker.docker/Data/s51,tag=port -s 7,virtio-sock,guest_cid=3,path=/Users/jmurphy/Library/Containers/com.docker.docker/Data,guest_forwards=2376;1525 -l com1,autopty=/Users/jmurphy/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty,log=/Users/jmurphy/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/console-ring -f kexec,/Applications/Docker.app/Contents/Resources/moby/vmlinuz64,/Applications/Docker.app/Contents/Resources/moby/initrd.img,earlyprintk=serial console=ttyS0 com.docker.driver="com.docker.driver.amd64-linux", com.docker.database="com.docker.driver.amd64-linux" ntp=gateway mobyplatform=mac -F /Users/jmurphy/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/hypervisor.pid
jmurphy            776   0.0  0.1 556636936   7780   ??  S     9:43PM   0:00.03 /Applications/Docker.app/Contents/MacOS/com.docker.driver.amd64-linux -db /Users/jmurphy/Library/Containers/com.docker.docker/Data/s40 -osxfs-volume /Users/jmurphy/Library/Containers/com.docker.docker/Data/s30 -slirp /Users/jmurphy/Library/Containers/com.docker.docker/Data/s50 -vmnet /var/tmp/com.docker.vmnetd.socket -port /Users/jmurphy/Library/Containers/com.docker.docker/Data/s51 -vsock /Users/jmurphy/Library/Containers/com.docker.docker/Data -docker /Users/jmurphy/Library/Containers/com.docker.docker/Data/s60 -addr fd:3 -debug
jmurphy            773   0.0  0.0 556622812   4068   ??  S     9:43PM   0:00.09 /Applications/Docker.app/Contents/MacOS/com.docker.osx.hyperkit.linux
jmurphy            772   0.0  0.1 556677904  11868   ??  Ss    9:43PM   0:00.27 com.docker.driver.amd64-linux -db /Users/jmurphy/Library/Containers/com.docker.docker/Data/s40 -osxfs-volume /Users/jmurphy/Library/Containers/com.docker.docker/Data/s30 -slirp /Users/jmurphy/Library/Containers/com.docker.docker/Data/s50 -vmnet /var/tmp/com.docker.vmnetd.socket -port /Users/jmurphy/Library/Containers/com.docker.docker/Data/s51 -vsock /Users/jmurphy/Library/Containers/com.docker.docker/Data -docker /Users/jmurphy/Library/Containers/com.docker.docker/Data/s60 -addr fd:3 -debug
jmurphy            771   0.0  0.1 556627968   9128   ??  Ss    9:43PM   0:00.54 com.docker.osx.hyperkit.linux
jmurphy            770   0.0  0.1  2513388  11132   ??  Ss    9:43PM   0:00.21 com.docker.slirp --db /Users/jmurphy/Library/Containers/com.docker.docker/Data/s40 --ethernet fd:3 --port fd:4 --vsock-path /Users/jmurphy/Library/Containers/com.docker.docker/Data/@connect --max-connections 900
jmurphy            769   0.0  0.2  2476848  12716   ??  Ss    9:43PM   0:00.45 com.docker.osxfs --address fd:3 --connect /Users/jmurphy/Library/Containers/com.docker.docker/Data/@connect --control fd:4 --volume-control fd:5 --database /Users/jmurphy/Library/Containers/com.docker.docker/Data/s40
jmurphy            768   0.0  0.1  2475860  12252   ??  Ss    9:43PM   0:01.61 com.docker.db --url fd:3 --git /Users/jmurphy/Library/Containers/com.docker.docker/Data/database
jmurphy            767   0.0  0.0 556622812   3980   ??  S     9:43PM   0:00.10 /Applications/Docker.app/Contents/MacOS/com.docker.osx.hyperkit.linux -watchdog fd:0
jmurphy            764   0.0  0.1 556679780   6492   ??  S     9:43PM   0:00.07 /Applications/Docker.app/Contents/MacOS/com.docker.osx.hyperkit.linux -watchdog fd:0
jmurphy           1887   0.0  0.0  2432804    840 s000  R+   10:18PM   0:00.00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn docker
root               100   0.0  0.0  2444416   1800   ??  Ss    9:43PM   0:00.01 /Library/PrivilegedHelperTools/com.docker.vmnetd
jmurphy           1878   0.0  0.0 556614264   3888   ??  S    10:17PM   0:00.01 /Applications/Docker.app/Contents/MacOS/com.docker.frontend {"action":"vmstateevent","args":{"vmstate":"running"}}
jmurphy           1877   0.0  0.0 556631812   4108   ??  S    10:17PM   0:00.01 /Applications/Docker.app/Contents/MacOS/com.docker.frontend {"action":"vmstateevent","args":{"vmstate":"running"}}

从文档中得知,在安装时,Docker for Mac基于Alpine Linux配置了一个HyperKit虚拟机,并运行Docker Engine。它将docker API公开在/var/tmp/docker.sock的套接字上。如果未设置任何环境变量,则由于这是docker在没有设置环境变量时查找的默认位置,您可以开始使用docker和docker-compose。

https://docs.docker.com/docker-for-mac/docker-toolbox/


1
这个有帮助吗:http://askubuntu.com/questions/477551/how-can-i-use-docker-without-sudo - Jay Rajput
我刚刚从这里安装了Docker for Mac,它似乎可以直接使用,无需sudo权限。docker --version显示的是Docker version 1.12.1, build 6f9534c - larsks
@JackMurphy,你的主机上执行 ls -l /var/run/docker.sock 的输出是什么? - larsks
2个回答

22

看起来问题是由于我的 ~/.zshrc 文件中有旧的条目引起的。

但我按照指令要求运行了以下步骤,却没有成功:

 unset DOCKER_TLS_VERIFY
 unset DOCKER_CERT_PATH
 unset DOCKER_MACHINE_NAME
 unset DOCKER_HOST

然而,如果在 ~/.zshrc(或者可能是你的 ~/.bashrc)文件中仍然存在相关条目,你可能需要手动移除它们并重新启动会话。之后,你应该能够在不需要使用sudo命令的情况下运行该命令。

➜  ~ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
92176e251311        redis               "docker-entrypoint.sh"   9 hours ago         Up 9 hours          6379/tcp            composetest_redis_1

我也设置了一个DOCKER_HOST变量,它在我的dotfiles中的某处 - 将其移除/取消设置对我有用。 - Mz A

1

我在Mac上运行docker命令时还必须使用sudo(我不知道为什么)。感谢Foad S. Farimani的解释,我解决了它。

我只想添加准备好使用的命令。第一个命令创建docker组。第二个命令将当前用户添加到docker组。

sudo dscl . create /Groups/docker
sudo dseditgroup -o edit -a $USER -t user docker

如果您需要不同的内容,请阅读Foad S. Farimani的答案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接