Изображения докеров-докеров: права пользователя / вопросы о хосте

Я только что развернул новый экземпляр Ubuntu, и я установил Docker

docker --version отчеты об изменениях: версия Docker 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 выше, я печатаю: su go

Это приводит меня в контейнер в качестве пользователя go@ec1ede694844 ( 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 , которая дает мне список возможных команд докеров, которые я могу использовать. Однако ни одна из этих команд не работает при использовании пользователя 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) сделать запись на сокет группе на хосте
  • (б) убедитесь, что пользователь go в вашем контейнере является членом группы с gid, который соответствует gid на хосте

В качестве альтернативы просто запустите все в своем контейнере как root, что позволяет избежать этой конкретной проблемы, но потенциально подвергает опасности проблемы безопасности, если вы используете недоверенный код внутри своих контейнеров.