dockerbuild设docker图片:用户权限/主机问题
我刚刚创build了一个新的Ubuntu实例,并且我已经安装了Docker
docker docker --version
报告:Docker版本1.7.1,build 786b29d
然后我运行了两个命令来设置CI / CDpipe道:
-
docker run -d -t -p 8153:8153 gocd/gocd-server
- 对于代理人,我开始如下:
docker run -d --privileged=true -ti -e GO_SERVER=<my_server_ip_address> -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/bin/docker gocd/gocd-agent
两个容器都按预期运行。 docker ps
报告如下:
25a7686b8653 gocd/gocd-server "/sbin/my_init" 6 seconds ago Up 5 seconds 0.0.0.0:8153->8153/tcp, 8154/tcp ec1ede694844 gocd/gocd-agent "/sbin/my_init" 5 second s ago Up 5 seconds
当我访问gocd-agent
,使用下面的命令:
sudo docker exec -i -t ec1ede694844 bash
我被带进代理。 一旦进入,我可以使用像docker images
命令没有任何问题。
go-agent
要求我们使用go
用户,所以使用上面相同的terminal/容器bash,我input: su go
这把我带到容器中作为go
用户( go@ec1ede694844
)。
当我尝试使用像docker images
或docker ps
命令时,我得到以下错误信息:
Get http:///var/run/docker.sock/v1.19/images/json: dial unix /var/run/docker.sock: permission denied. Are you trying to connect to a TLS-enabled daemon without TLS?
唯一可行的命令是标准的docker
命令,它给了我可以使用的可能的docker命令的列表。 但是,使用go
用户时,这些命令都不起作用。
有没有办法将容器的权限下载到用户帐户中?
或者,有什么办法可以让我重置docker.sock
这样我的用户就可以像docker images
一样运行命令了吗?
任何帮助,将不胜感激。
谢谢
这个错误…
Get http:///var/run/docker.sock/v1.19/images/json: dial unix /var/run/docker.sock: permission denied. Are you trying to connect to a TLS-enabled daemon without TLS?
意味着docker
无法打开Unix套接字/var/run/docker.sock
。 看看这个套接字的权限。 他们可能只允许root访问:
$ ls -l /var/run/docker.sock srw-------. 1 root root 0 Sep 1 15:08 /var/run/docker.sock
或者他们可能允许访问某个特定的组:
$ ls -l /var/run/docker.sock srw-rw----. 1 root dockerroot 0 Sep 1 15:08 /var/run/docker.sock
在任何一种情况下,容器中的go
用户都无法访问此套接字。 理想情况下,您需要:
- (a)使主机上的套接字组可写
- (b)确保容器中的
go
用户是gid与主机上的gid相匹配的组的成员
或者,只需以root身份运行容器中的所有内容,即可避免此特定问题,但如果在容器中运行不受信任的代码,则可能会暴露安全问题。