dockerbuild设docker图片:用户权限/主机问题

我刚刚创build了一个新的Ubuntu实例,并且我已经安装了Docker

docker docker --version报告:Docker版本1.7.1,build 786b29d

然后我运行了两个命令来设置CI / CDpipe道:

  1. docker run -d -t -p 8153:8153 gocd/gocd-server
  2. 对于代理人,我开始如下:

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 imagesdocker 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身份运行容器中的所有内容,即可避免此特定问题,但如果在容器中运行不受信任的代码,则可能会暴露安全问题。