【发布时间】:2017-08-21 19:57:19
【问题描述】:
问题:有没有一种方法可以让我只在第一次创建 vagrant 机器时构建和运行 docker 映像?
问题:运行vagrant provision 时出现错误提示docker: Error response from daemon: Conflict. The container name "/jenkins" is already in use by container <snip>。
附加信息:我跑了vagrant provision,因为我在plugins.txt文件中添加了另一个插件,以便在设置jenkins机器时自动安装。
我以这种方式创建了构建脚本,以使 vagrant 机器构建尽可能快,并且 docker 镜像尽可能小(这里仍然需要工作)。还因为我想删除 Jenkins 设置 GUI,并创建了一个默认管理员帐户。
流浪文件:
Vagrant.require_version ">= 1.5"
Vagrant.configure("2") do |config|
config.vbguest.auto_update = false
config.vm.provider :virtualbox do |v|
v.customize [
"modifyvm", :id,
"--memory", 1024,
"--natdnshostresolver1", "on",
"--cpus", 2,
]
end
config.vm.box = "ubuntu/trusty64"
config.vm.hostname = "dev-jenkins-site"
# Forward jenkins port.
config.vm.network "forwarded_port", guest: 8080, host: 8080
config.vm.network :private_network, ip: "192.168.34.56"
jenkins_dir = "/var/jenkins_home"
# Run Dockerfile.
config.vm.provision "docker"
# Restart jenkins container, in case it was stopped (which is possible from a 'vagrant halt').
# This won't run if this after the docker build & run provision (below) when using 'vagrant provision' because it
# returns an error and exits before this can run.
config.vm.provision "shell",
inline: "docker restart jenkins",
run: "always"
# Only need to build the image and container one time.
# Using '--restart always' doesn't work when the container is stopped from 'vagrant halt'.
config.vm.provision "shell",
inline: "cd /vagrant && make jenkins && docker run -d --name jenkins -p 80:8080 -p 50000:50000 -v #{jenkins_dir}:#{jenkins_dir} draven/jenkins",
run: "once"
# Files on your local machine
config.vm.synced_folder "./jenkins_home", jenkins_dir
config.vm.synced_folder ".", "/vagrant"
end
Dockerfile:
FROM jenkins/jenkins:latest
COPY plugins.txt /usr/share/jenkins/ref/plugins.txt
RUN /usr/local/bin/install-plugins.sh < /usr/share/jenkins/ref/plugins.txt
ENV JENKINS_USER admin
ENV JENKINS_PASS admin
# Skip initial setup
ENV JAVA_OPTS -Djenkins.install.runSetupWizard=false
COPY default-user.groovy /usr/share/jenkins/ref/init.groovy.d/
VOLUME /var/jenkins_home
生成文件:
SHELL:=/bin/bash
jenkins:
cd docker-image && docker build -t draven/jenkins .
【问题讨论】: