2015-09-02 4 views
1

Я просто раскручиваюсь свежий экземпляром Ubuntu, и я установил DockerDocker здания Докер изображение: Разрешение/Принимающие Вопросы

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 пользователя, поэтому, используя тот же терминал/контейнер Баш выше, я типа: su go

Это приводит меня в контейнер, как go пользователя ([email protected]).

При попытке использовать команду типа 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 так, чтобы он позволял моему пользователю go запускать команды вроде docker images?

Любая помощь будет оценена по достоинству.

Спасибо

+0

Не пытались эти изображения докеров, но когда вы подключаете агент к серверу gocd, почему бы не использовать опцию '--link'? IP-адрес go-сервера go может продолжать меняться. – 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. Взгляните на разрешения на этот сокет.Они могут позволить только корневой доступ:

$ 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, который соответствует идентификатор группы на хозяина

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

+0

Привет, ярски, спасибо за ваш ответ. Можете ли вы рассказать о том, как я буду выполнять (б)? Кроме того, re: запускать все как root .. Агент GoCD, похоже, хочет установить его «go» в качестве части установки. Когда я делаю сборку, она пытается использовать агент «go». Поистине оцените вашу помощь. –

+0

в контейнере> добавьте группу с определенным gid и убедитесь, что пользователь этого пользователя, –

+0

AKA это для ** Добавить пользователя 'go' для группового докера, чтобы дать разрешение на вызов docker-command **: 'usermod -a -G docker go' – helmesjo

Смежные вопросы