2015-09-02 232 views
1

我剛剛紡了一個新鮮的Ubuntu實例,我已經安裝了碼頭工人泊塢窗泊塢窗大廈圖片:用戶權限/主機問題

docker --version報道:泊塢版本1.7.1,建立786b29d

然後我跑了設置命令一個CI/CD管道:

  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用戶,因此,使用上述相同的端子/容器bash中,I型:su go

這使我到容器作爲go用戶([email protected])。

當我嘗試使用如下命令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這樣的命令?

任何幫助,將不勝感激。

謝謝

+0

沒有嘗試這些碼頭圖像,但是當您將代理連接到gocd服務器時,爲什麼不使用'--link'選項? go cd服務器IP可能會不斷變化。 – BMW

+0

這是訪問unix套接字('/ var/run/docker.sock')的權限錯誤。它與地址無關。 – larsks

回答

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用戶的容器內沒有訪問該插座。理想情況下,你需要:

  • (一)使插座組可寫的主機上
  • (二)確保go用戶在你的容器是集團與匹配的GID成員在主機

上交替GID,只需要運行在你的容器爲根,從而避免了這一特殊問題的一切,但如果你是你的容器內運行不受信任的代碼可能暴露的安全問題。

+0

嗨Iarsks,謝謝你的回答。你能詳細說明我將如何完成(b)?此外,重新:以root身份運行所有內容。GoCD代理似乎希望將其設置爲'go'用戶作爲安裝的一部分。當我構建時,它會嘗試使用'go'代理。真心感謝您的幫助。 –

+0

在容器中>添加一個特定的gid組,並確保go用戶是它的成員, –

+0

AKA this to **添加用戶'去'組泊塢窗允許調用碼頭命令**: 'usermod -a -G docker go' – helmesjo