Eu sou novo no docker. Eu apenas tentei usar o docker na minha máquina local (Ubuntu 16.04) com o Jenkins.
Eu configurei um novo trabalho com o script de pipeline abaixo.
node {
stage('Build') {
docker.image('maven:3.3.3').inside {
sh 'mvn --version'
}
}
}
Mas falha com erro abaixo.
docker
jenkins
jenkins-pipeline
Ponsuyambu Velladurai
fonte
fonte
Respostas:
O usuário
jenkins
precisa ser adicionado ao grupodocker
:Em seguida, reinicie o Jenkins.
Editar
Se você chegar a essa questão do estouro de pilha porque recebe esta mensagem do docker, mas não usa o jenkins, provavelmente o erro é o mesmo: seu usuário não privilegiado não pertence ao grupo do docker.
Você pode fazer:
ou qualquer que seja seu nome de usuário.
Você pode verificá-lo no final
grep docker /etc/group
e ver algo assim:em uma das linhas.
Altere seu ID do grupo de usuários para
docker
:fonte
sudo usermod -a -G docker $USER
e sair ou reiniciar. linknewgrp docker
na mesma sessão do terminal.Minhas primeiras soluções foram:
Mas nenhum deles funciona para mim, tentei:
Isso funciona, mas não sei se é a decisão certa.
fonte
docker.sock
arquivo não é a melhor solução, você só precisa executar asusermod
... instruções e depois reiniciar o sistema, caso contrário não terá efeitoSucesso para mim
fonte
19/08/2018
Estou parado há dias neste e como não encontrei uma resposta completa com o porquê e como, vou postar um para outras pessoas que tropeçam no mesmo problema e as respostas acima não funcionam.
Estas são as três etapas cruciais ao executar o Jenkins dentro da janela de encaixe:
/var/run/docker.sock
no contêiner jenkins para poder usar a janela de encaixe do host.sudo usermod -a -G docker jenkins
para adicionar jenkins ao grupo de janelas de encaixe. No entanto, aqui você pode ter um problema de permissão se a janela de encaixe host e a janela de encaixe de contêiner não tiverem o mesmo ID de grupo, portanto , é muito importante ajustar o gid da janela de encaixe para que seja o mesmo que o de janela de encaixe hostVocê pode fazer isso como parte de um script de lançamento ou simplesmente usando
exec
e fazê-lo manualmente:groupmod -g <YOUR_HOST_DOCKER_GID> docker
.Além disso, não altere as permissões do
/var/run/docker.sock
para 777 ou coisas assim, porque esse é um grande risco de segurança, você está basicamente dando permissão a todos para usar o docker em sua máquinaEspero que isto ajude
fonte
Eu adicionei o usuário jenkins ao grupo raiz e reiniciei o jenkins e ele começou a funcionar.
fonte
Alterar a permissão de acesso do arquivo docker.sock
ou você pode usar
sudo
no início do comando.chmod 777
permitirá todas as ações para todos os usuários, enquantochmod 666
permitirá que todos os usuários leiam e gravem, mas não podem executar o arquivo.fonte
Simplesmente adicionando
docker
como um grupo suplementar para ojenkins
usuárionem sempre é suficiente ao usar uma imagem do Docker como o Jenkins Agent . Ou seja, se você
Jenkinsfile
começar compipeline{agent{dockerfile
oupipeline{agent{image
:Isso ocorre porque Jenkins executa um
docker run
comando, o que resulta em três problemas.docker run
não faz logon no contêiner (é mais como umsudo
).Instalando o Docker para o agente
Para disponibilizar os programas do Docker na imagem do Docker, basta executar as etapas de instalação do Docker no seu Dockerfile:
Compartilhando o soquete do daemon do Docker
Como já foi dito anteriormente , corrigir o segundo problema significa executar o contêiner Jenkins Docker para que ele compartilhe o soquete do daemon Docker com o daemon Docker que está fora do contêiner. Portanto, você precisa dizer ao Jenkins para executar o contêiner Docker com esse compartilhamento, assim:
Definindo UIDs e GIDs
A solução ideal para o terceiro problema seria a criação de grupos suplementares para o agente. Isso não parece possível. A única correção que tenho conhecimento é executar o agente com o Jenkins UID e o Docker GID (o soquete possui permissão de gravação em grupo e pertence a ele
root.docker
). Mas, em geral, você não sabe quais são esses IDs (eles foram alocados quandouseradd ... jenkins
egroupadd ... docker
executados quando Jenkins e Docker foram instalados no host). E você não pode simplesmente dizer ao Jenkins para usuáriojenkins
e grupodocker
porque isso instrui o Docker a usar o usuário e o grupo que estão nomeados
jenkins
edocker
dentro da imagem , e sua imagem do Docker provavelmente não tem ojenkins
usuário e o grupo e, mesmo que existisse, não haveria garantia de que teria o mesmo UID e GID que o host, e também não há garantia de que odocker
GID seja o mesmoFelizmente, Jenkins executa o
docker build
comando para o seu Dockerfile em um script, para que você possa executar alguma mágica de script de shell para passar essas informações à medida que o Docker cria argumentos:Isso usa o
id
comando para obter o UID e o GID dojenkins
usuário e ostat
comando para obter informações sobre o soquete do Docker.Seu Dockerfile pode usar essa informação para configurar um
jenkins
usuário edocker
grupo para o agente, usandogroupadd
,groupmod
euseradd
:fonte
-u jenkins:$(getent group docker | cut -d: -f3)
?args '-v /var/run/docker.sock:/var/run/docker.sock -u jenkins:docker'
aoargs '-v /var/run/docker.sock:/var/run/docker.sock -u jenkins:jenkins --group-add docker'
passar -u jenkins: docker, você altera o grupo de usuários principal, o que significa que quando o usuário grava um arquivo, digamos na área de trabalho, ele define o arquivo usuário para jenkins e o grupo para janela de encaixe. O que provavelmente não é o que pretendemos.Eu tenho o Jenkins rodando no Docker e o Jenkins conectado está usando o soquete do Docker da máquina host Ubuntu 16.04 via volume para /var/run/docker.sock.
Para mim, a solução foi:
1) Dentro do contêiner Docker de Jenkins (
docker exec -it jenkins bash
na máquina host)2) Na máquina host:
664
significa - ler e escrever (mas não executar) para o proprietário e os usuários do grupo.fonte
Ao fazer a configuração de produção, obtive o problema de permissão. Tentei a solução abaixo para resolver o problema.
Mensagem de erro
Solução: permissões do soquete indicadas na mensagem de erro /var/run/docker.sock:
Após alterar a permissão para docket.sock, execute o comando abaixo para verificar as permissões.
fonte
No meu caso, não foi apenas necessário adicionar
jenkins
usuário aodocker
grupo, mas tornar esse grupo o grupo principal dojenkins
usuário.Não se esqueça de reconectar o nó escravo jenkins ou reiniciar o servidor jenkins, dependendo do seu caso.
fonte
16/02/2019
A maioria dos passos foram os mesmos para mim, como os outros escreveram. No entanto, não consegui adicionar jenkins à janela de encaixe do grupo usando o usermod com as soluções mencionadas.
Tentei o seguinte comando no host do docker e no contêiner do docker em execução :
(Entrei no contêiner do estivador em execução com o seguinte comando do host do estivador :
)
Recebido do host do docker :
Recebido do contêiner do docker :
Eu não sabia a senha.
Sem a
sudo
parte do comando, no container docker , recebi:Solução: Entrei no contêiner do estivador em execução a partir do host do estivador com o seguinte comando:
Agora, entrei como root e emiti o seguinte comando:
Em seguida, no host da janela de encaixe , reiniciei meu contêiner em execução com o seguinte comando:
Depois disso, iniciei o trabalho de Jenkins e terminei com sucesso.
Eu usei apenas o usuário root para emitir o
usermod
comando para o usuáriojenkins
.fonte
2019-05-26
Isso funcionou para mim!
Exemplo docker-compose:
fonte
Eu enfrentei um problema semelhante, que é um problema de permissão, e a causa desse problema é que o daemon / servidor do Docker sempre é executado como
root
usuário e deseja que você sempre anteceda o comando do dockersudo
.O daemon do Docker se liga a um soquete Unix em vez de uma porta TCP. Por padrão, o soquete Unix é de propriedade do usuário
root
e outros usuários só podem acessá-lo usandosudo
.Para corrigir isso, aqui está o que funcionou para mim:
Primeiro, verifique se você já possui um grupo de janelas de encaixe:
Se você não encontrar
docker
na lista exibida, será necessário criar uma:Em seguida, confirme seu
user
e vocêgroup
usando o comando abaixo:Role para ver o grupo da janela de encaixe. Deve ser deste formato
onde
docker
está o meugroup
epromisepreston
é meuuser
Agora podemos adicionar seu usuário ao grupo de janelas de encaixe
Apenas para arquivos de contêiner do Docker:
Copie e execute o comando abaixo no seu terminal exatamente como ele é declarado sem modificá-lo, independentemente da imagem do docker / contêiner / comando que você deseja executar ou está tentando executar ou está apresentando o problema de permissão:
Depois de executar o comando acima, você precisará fazer logoff e logon novamente, para que sua associação ao grupo seja reavaliada. No entanto, no Linux, você também pode executar o seguinte comando abaixo para ativar as alterações nos grupos ( copie e execute o comando abaixo em seu terminal exatamente como ele é declarado sem modificá-lo de qualquer maneira, independentemente da imagem do docker / container / comando que você deseja executar ou está tentando executar ou está apresentando o problema de permissão ):
Agora você pode verificar se é possível executar comandos do docker sem permissões do sudo, executando o comando que está causando o problema de permissões novamente, diga ( Substitua
my-command
pelo nome da sua imagem / contêiner / comando ):Para arquivos do sistema de arquivos Docker e Local:
Se você tiver uma cópia dos arquivos no sistema de arquivos local, poderá alterar a propriedade do diretório do aplicativo em que os arquivos do aplicativo estão armazenados, usando este formato:
Então, no meu caso, será:
Nota: Execute este comando dentro do diretório pai que abriga o diretório do aplicativo.
Isso é tudo.
Eu espero que isso ajude
fonte
fonte
Estou executando o Jenkins dentro de um contêiner. A solução mais simples para mim foi criar uma imagem personalizada que defina dinamicamente o GID, como:
Consulte: https://github.com/jenkinsci/docker/issues/263
Como alternativa, você pode iniciar o jenkins com as seguintes opções:
Isso pressupõe que sua imagem jenkins tenha o cliente docker instalado. Consulte: https://getintodevops.com/blog/the-simple-way-to-run-docker-in-docker-for-ci
fonte
Se você receber erros como abaixo,
ou
Apenas tente executar os seguintes comandos,
fonte
usermod -a -G docker jenkins
echown jenkins:docker /var/run/docker.sock
Estou usando a imagem oficial do docker jenkins ( https://hub.docker.com/r/jenkins/jenkins ), mas acho que esta solução é aplicável à maioria dos casos de uso em que queremos executar o Docker dentro de um contêiner do Docker.
A maneira recomendada de usar o Docker dentro de um contêiner do Docker é usar o deamon do Docker do sistema host. Bom artigo sobre isso: https://itnext.io/docker-in-docker-521958d34efd .
O segredo para lidar com o problema de permissão, que é a questão, é adicionar permissões para o usuário do contêiner dentro do contêiner, não para o sistema host . Somente o usuário root tem permissões para fazer isso por padrão, portanto
vai fazer isso. Lembre-se de reiniciar o contêiner.
Eu acho que a maneira mais simples de conseguir isso é criar um Dockerfile personalizado:
fonte
Se alguém ainda estiver enfrentando o problema em sua máquina local (Ubuntu), tente o comando abaixo:
fonte
No meu caso, isso funcionará com sucesso. navegue no seu repositório local e insira este comando.
fonte
No servidor em que o Jenkins está sendo executado, eu usei
E, em seguida, execute cada contêiner de docker com
O uso de setfacl parece uma opção melhor e não é necessário "-u user". Os contêineres são executados como o mesmo usuário que está executando o Jenkins. Mas gostaria de receber qualquer feedback dos especialistas em segurança.
fonte
use abaixo dockerfile
fonte
no meu caso, estava apenas iniciando o serviço docker:
fonte
geralmente é necessário reiniciar para entrar em vigor no novo grupo e usuário.
fonte
Se você estiver executando o Jenkins dentro de um contêiner de docker e seu Jenkins estiver vinculado à janela de encaixe host, será possível corrigir isso apenas no Dockerfile abaixo:
fonte
Talvez você deva executar a janela de encaixe com a opção "-u root" desde o início
Pelo menos isso resolveu meu problema
fonte
root
. Pelo menos foi o que aconteceu comigo com o Docker 18.06.1.