Docker构建docker镜像:用户权限/主机问题

时间:2015-09-02 21:11:21

标签: docker

我刚刚启动了一个新的Ubuntu实例,我已经安装了Docker

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

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

  1. docker run -d -t -p 8153:8153 gocd/gocd-server
  2. 对于代理商,我的开头如下:
  3. 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用户,因此使用上面相同的终端/容器bash,我输入: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,以便我的go用户可以运行docker images等命令?

    任何帮助都将不胜感激。

    谢谢

1 个答案:

答案 0 :(得分:1)

此错误......

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