2016-06-29 33 views
10

Sto eseguendo Jenkins e Docker su una macchina CentOS. Ho un lavoro di Jenkins che estrae un repository Github e costruisce un'immagine Docker. Quando provo l'esecuzione del lavoro ottengo l'errore:Jenkins: Impossibile connettersi al daemon Docker

+ docker build -t myProject . Cannot connect to the Docker daemon. Is the docker daemon running on this host? Build step 'Execute shell' marked build as failure Finished: FAILURE

Questo è si verifica anche se ho aggiunto Jenkins alla mia finestra mobile usergroup via sudo usermod -aG docker jenkins e riavviato la mia macchina. Come posso risolvere questo?

A proposito, se provare a cambiare il comando per sudo docker build -t myProject . ottengo solo l'errore sudo: sorry, you must have a tty to run sudo

+0

Qual è 'sudo stato del servizio finestra mobile' di tornare sulla vostra macchina CentOS? – lvthillo

+0

E 'attivo: 'servizio sudo stato finestra mobile Reindirizzamento a/bin/systemctl stato docker.service ● docker.service - Docker del contenitore di applicazioni del motore Loaded: caricato (/usr/lib/systemd/system/docker.service ; abilitato; preimpostazione fornitore: disabilitato) Attivo: attivo (in esecuzione) da mer. 2016-06-29 14:10:13 UTC; 5h 40min fa Documenti: https://docs.docker.com PID principale: 24858 (finestra mobile) Memoria: 30.1M' – pcsram

+0

Okay, per quanto ho capito: Jenkins non è in esecuzione nella finestra mobile? – lvthillo

risposta

19

Dopo l'installazione di Jenkins e Docker. Aggiungi Jenkins all'utente di dockergroup (come hai fatto)

sudo gpasswd -a jenkins docker 

Modificare il seguente file

vi /usr/lib/systemd/system/docker.service 

e modificare questa regola per esporre l'API:

ExecStart=/usr/bin/docker daemon -H unix:// -H tcp://localhost:2375 

Ora è il momento di ricaricare e riavvia il tuo demone Docker

systemctl daemon-reload 
systemctl restart docker 

Poi ho riavviato Jenkins e sono stato in grado di eseguire i comandi della finestra mobile come utente Jenkins nei miei lavori Jenkins

sudo service jenkins restart 
+2

Grazie, questo funziona. Semplicemente curioso, in che modo l'aggiunta dell'indirizzo TCP alla linea ExecStart influisce sulla Docker e sul modo in cui può parlare con Jenkins? – pcsram

+1

Quindi Jenkins non può chiamare direttamente Docker, anche se è installato sulla stessa macchina? – pcsram

+11

Davvero non mi piace questa risposta. Hai aperto 2375 al mondo sul tuo computer di costruzione. Dovresti almeno riconoscere questo nella tua risposta e indicare che gli utenti dovrebbero metterlo dietro un firewall. Potresti anche restringere la gamma di indirizzi IP. C'è qualche ragione per accettare connessioni da qualsiasi luogo? – mttdbrd

1

Un'altra opzione è quella di puntare il finestra mobile ospite Jenkins a 'unix: /// var/run/finestra mobile. calzino '

Questo è invece di eseguire l'host di finestra mobile reale e aprirlo.

1

@lvthillo, la tua risposta è buona, ma non abbastanza. È inoltre necessario creare il gruppo docker. Vedere post Fasi di installazione per DockerGestire Docker come utente non root https://docs.docker.com/engine/installation/linux/linux-postinstall/#manage-docker-as-a-non-root-user

aggiungere l'utente che esegue Jenkins al gruppo finestra mobile.

E.g. se si esegue server di Jenkins sotto l'utente jenkins:

Passaggio 1: Creare Docker Gruppo

sudo groupadd docker 

Fase 2: Aggiungi il tuo utente al gruppo docker:

sudo usermod -aG docker jenkins 

Fase 3: Logout e riaccedere come jenkins, quindi testare:

docker ps 
CONTAINER ID  IMAGE    COMMAND    CREATED    STATUS    PORTS    NAMES 

IlAl gruppoviene assegnato un trattamento speciale dal daemon docker all'avvio proprio per questo scopo. Ora qualsiasi utente di quel gruppo può chiamare la finestra mobile senza sudo. Usalo con cura.

https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface