tutorial - jenkins push docker hub
Accediendo al host de docker desde el contenedor de(jenkins) docker (3)
Necesito ejecutar los comandos del docker de jenkins que está instalado como un contenedor en la ventana acoplable. Mi configuración local está en un OSX y uso boot2docker para virtualizar el docker.
He instalado jenkins en la ventana acoplable simplemente docker run -d -p 8080:8080 --name jenkins jenkins
y funciona bien.
En jenkins, he instalado el "complemento Docker" https://wiki.jenkins-ci.org/display/JENKINS/Docker+Plugin que necesita la URL de DOCKER para acceder a la aplicación docker.
Cuando boot2docker se inicia, obtengo lo siguiente: DOCKER_HOST=tcp://192.168.59.103:2376
, entonces supongo que Docker api se está ejecutando en ese host / por?
En jenkins configuré el campo DOCKER URL como http://192.168.59.103:2376
pero recibo el siguiente error "shaded.org.apache.http.client.ClientProtocolException".
Parece que el contenedor no puede acceder al servidor boot2docker docker. Tal vez me falta algo, pero no puedo descifrar cuál es el puerto / IP correcto que debo usar.
Actualización: Más detalles
This is what I get when I start boot2docker:
bash-3.2$ unset DYLD_LIBRARY_PATH ; unset LD_LIBRARY_PATH
bash-3.2$ mkdir -p ~/.boot2docker
bash-3.2$ if [ ! -f ~/.boot2docker/boot2docker.iso ]; then cp /usr/local/share/boot2docker/boot2docker.iso ~/.boot2docker/ ; fi
bash-3.2$ /usr/local/bin/boot2docker init
WARNING: The ''boot2docker'' command line interface is officially deprecated.
Please switch to Docker Machine (https://docs.docker.com/machine/) ASAP.
Docker Toolbox (https://docker.com/toolbox) is the recommended install method.
Virtual machine boot2docker-vm already exists
bash-3.2$ /usr/local/bin/boot2docker up
WARNING: The ''boot2docker'' command line interface is officially deprecated.
Please switch to Docker Machine (https://docs.docker.com/machine/) ASAP.
Docker Toolbox (https://docker.com/toolbox) is the recommended install method.
Waiting for VM and Docker daemon to start...
...............oooooooo
Started.
Writing /Users/local/.boot2docker/certs/boot2docker-vm/ca.pem
Writing /Users/local/.boot2docker/certs/boot2docker-vm/cert.pem
Writing /Users/local/.boot2docker/certs/boot2docker-vm/key.pem
To connect the Docker client to the Docker daemon, please set:
export DOCKER_TLS_VERIFY=1
export DOCKER_HOST=tcp://192.168.59.103:2376
export DOCKER_CERT_PATH=/Users/local/.boot2docker/certs/boot2docker-vm
Or run: `eval "$(boot2docker shellinit)"`
bash-3.2$ $(/usr/local/bin/boot2docker shellinit)
Writing /Users/local/.boot2docker/certs/boot2docker-vm/ca.pem
Writing /Users/local/.boot2docker/certs/boot2docker-vm/cert.pem
Writing /Users/local/.boot2docker/certs/boot2docker-vm/key.pem
bash-3.2$ docker version
Client:
Version: 1.8.0
API version: 1.20
Go version: go1.4.2
Git commit: 0d03096
Built: Tue Aug 11 17:17:40 UTC 2015
OS/Arch: darwin/amd64
Server:
Version: 1.8.0
API version: 1.20
Go version: go1.4.2
Git commit: 0d03096
Built: Tue Aug 11 17:17:40 UTC 2015
OS/Arch: linux/amd64
Aquí va la configuración jenkins para la nube:
Como @ISanych sugiere, simplemente puede hacer -v /var/run/docker.sock:/var/run/docker.sock
y también funcionará mágicamente en boot2docker. No es necesario definir DOCKER_URL
.
También puede encontrar que el --net=host
útil si necesita acceder a los puertos de los contenedores iniciados.
Esto probablemente debería ser un comentario sobre la respuesta anterior, pero eso no parece posible. Esta es solo una nota para recordarle a la gente que escuchar en 0.0.0.0 significa escuchar en cualquier interfaz públicamente enrutable que se pueda conectar a cualquier interfaz de red física o virtual configurada en su sistema. Prudence sugiere limitar su exposición a solo una red interna, menos probabilidades de encontrar fuerzas hostiles con malas intenciones.
Me encontré con exactamente el mismo problema con mi plugin Jenkers docker. Docker usa tls de forma predeterminada, pero el complemento de Docker solo es compatible con http. Lo que hice fue deshabilitar la verificación de TLS en la máquina acopladora. Mi docker es una Ubuntu, por lo que el archivo docker conf se encuentra en /etc/default/docker
. Dentro del archivo conf, puede deshabilitar TLS agregando
--tls=false
en DOCKER_OPTS. Algo como:
DOCKER_OPTS=''-H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock --tls=false''