4

我正在使用 Docker 版本 19.03.11 附带的全新 Fedora CoreOS。

我的core用户在docker组中:

[core@localhost ~]$ groups
core adm wheel sudo systemd-journal docker

按照 portainer 的部署说明,我创建了一个像这样的新 Portainer 容器(作为coreor root,它甚至没有关系):

$ docker volume create portainer_data
$ docker run -d -p 9000:9000 -p 8000:8000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

当我尝试连接到本地守护进程时:

尝试连接到 Docker 守护程序套接字时权限被拒绝

的权限/var/run/docker.sock

[core@localhost ~]$ ll /var/run/docker.sock
srw-rw----. 1 root docker 0 Aug  2 10:02 /var/run/docker.sock

就算我chmod o+rw /var/run/docker.sock也行不通。这表明问题可能出在容器本身,所以我尝试访问它,但我不能:

[core@localhost ~]$ docker exec -it portainer sh
OCI runtime exec failed: exec failed: container_linux.go:349: starting container process caused "exec: \"sh\": executable file not found in $PATH": unknown

到目前为止,我发现的所有资源都建议将用户添加到docker组中,我这样做了,重新启动机器,我这样做了,或者设置 666 on /var/run/docker.sock,我做了但不喜欢这样做。没有任何帮助。

知道出了什么问题以及如何解决吗?

4

3 回答 3

2

如果是 SELinux 问题,请先尝试关注portainer/portainer问题 849

正确的方法是将 :z 添加到卷映射中,这样您就不会破坏 docker 的目的。

像这样:

docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock:z portainer/portainer

我们还需要一种在 Portainer 中为新容器添加 z 或 Z 标志的方法。这是自 1.7 以来的一个特性,例如 2015 年在 Docker 中。

那,或使用dpw/selinux-dockersock

于 2020-08-02T11:05:11.953 回答
1

感谢 Portainer Discord 上的 MrPaperbag,我发现这是因为 SELinux 的限制。

在这里找到解决方案:https ://nanxiao.me/en/selinux-cause-permission-denied-issue-in-using-docker/

使用 运行docker run--privileged或使用 将 SELinux 模式设置为允许setenforce 0。可能有一种方法可以正确配置 SELinux,而不仅仅是规避它,但是,对于我的用例来说,这已经足够好了。

于 2020-08-02T11:02:37.310 回答
0

命令中一切正常。我进行了复制,并且使用此配置可​​以正常工作:

ls -la /var/run/ | grep docker
drwx------  8 root                root                 180 Aug  1 14:40 docker
-rw-r--r--  1 root                root                   4 Aug  1 14:29 docker.pid
srw-rw----  1 root                docker                 0 Aug  1 14:29 docker.sock
getenforce 
Permissive

如果这些不能解决它,我会尝试卸载预安装的 docker。您可能永远不知道他们使用了哪些阴暗的设置。

在此处输入图像描述

于 2020-08-02T11:15:08.000 回答