2016-05-09 13 views
1

У меня есть dockerfile:Дженкинс пользователь с помощью докер (внутри Docker контейнера)

FROM jenkins:1.651.1 
COPY plugins.txt /usr/share/jenkins/plugins.txt 
RUN /usr/local/bin/plugins.sh /usr/share/jenkins/plugins.txt 
USER root 
RUN groupadd docker 
RUN usermod -a -G docker jenkins 
USER jenkins 

добавляю мой пользователь jenkins к группе docker. Когда я получить доступ к моему контейнеру:

[email protected]:/$ docker ps 
Cannot connect to the Docker daemon. Is the docker daemon running on this host? 
[email protected]:/$ whoami 
jenkins 

Это содержание моего /etc/group на моем контейнере

jenkins:x:1000: 
docker:x:1001:jenkins 

мой Дженкинс пользователь находится в Докер группе

[email protected]:/$ groups jenkins 
jenkins : jenkins docker 

Что я делаю неправильно? Я хочу использовать команды docker с моим пользователем jenkins. Я нахожусь в Amazon EC2 Container Service.

Это, как я начинаю контейнер из моего изображения:

docker run -d -v /var/run/docker.sock:/var/run/docker.sock -v 
/usr/bin/docker:/usr/bin/docker:ro -v 
/lib64/libdevmapper.so.1.02:/usr/lib/x86_64-linux-gnu/libdevmapper.so.1.02 
-v /lib64/libudev.so.0:/usr/lib/x86_64-linux-gnu/libudev.so.0 
-p 8080:8080 --name jenkins -u jenkins --privileged=true -t -i 
my-jenkins:1.0 

ответ

0

После того, как ваш контейнер работает, вы можете «заплату» в запущенном контейнер с использованием различных пользователей с помощью

docker exec -ti -u 0 jenkins bash // root 
docker exec -ti -u 1 jenkins bash // probably jenkins 

Использования root, вы можете su jenkins, если вам нужно переключиться на пользователя jenkins от пользователя root.

Если вы хотите запустить Docker контейнеры внутри существующего контейнера (похоже, что это то, что вы пытаетесь), помните, чтобы начать свой Docker контейнер с --privileged флагом, например, docker run --privileged ...

+0

Я использую -privileged для начала. когда я использую -u root, я могу выполнять команды докеров, потому что я являюсь пользователем root в своем контейнере. Но я хочу отредактировать файл docker, чтобы я мог выполнять эти команды с моим пользователем jenkins. – DenCowboy

+0

Вы сделали «sudo gpasswd -a jenkins docker», за которым следует перезапуск службы докеров «sudo service docker restart»? –

+0

Да пробовал первую команду. Я не могу перезапустить службу докеров изнутри файла docker. – DenCowboy

2

Это было мое «решение ', но он работал только на Ubuntu (не на моем centos). Dockerfile

FROM jenkins:1.651.1 
USER root 
RUN apt-get update \ 
    && apt-get install -y apt-transport-https ca-certificates \ 
    && echo "deb https://apt.dockerproject.org/repo debian-jessie main" > /etc/apt/sources.list.d/docker.list \ 
    && apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D \ 
    && apt-get update -y \ 
    && apt-get install -y docker-engine 
RUN gpasswd -a jenkins docker 
USER jenkins 

команда Run:

docker run -d -it -v /var/run/docker.sock:/var/run/docker.sock test-jenkins 

В Ubuntu:

[email protected]:/$ whoami 
jenkins 
[email protected]:/$ docker ps 
CONTAINER ID  IMAGE    COMMAND     CREATED    STATUS    PORTS            NAMES 
c73c683b02d7  test-jenkins  "/bin/tini -- /usr/lo" 2 minutes ago  Up 2 minutes  8080/tcp, 50000/tcp 

         condescending_wing 

Это что-то делать с gid я думаю: кот /etc/group в контейнере (на убунту и CentOS) ,

jenkins:x:1000: 
docker:x:999:jenkins 

кот /etc/group на Ubuntu (также 999)

docker:x:999:ubuntu 

кот /etc/group на Centos (разные GID)

docker:x:983:centos 

Существует, вероятно, решение для этого. Но мне нужен был только Ubuntu, поэтому в этом не пошел.

+0

Довольно уверен, что вы прибили его, gid docker должен быть таким же на хосте и в контейнере для /var/run/docker.sock, чтобы быть доступным пользователям докеров в контейнере. – BMitch

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