Docker构build和运行只能在第一个stream浪汉中进行

问题:有没有一种方法可以在首次创buildstream浪机时创build并运行泊坞窗图像?

问题:当运行vagrant provision我得到一个错误说, docker: Error response from daemon: Conflict. The container name "/jenkins" is already in use by container <snip> docker: Error response from daemon: Conflict. The container name "/jenkins" is already in use by container <snip>

附加信息:我跑了vagrant provision因为我添加了plugins.txt文件的另一个插件来自动安装设置jenkins机器时。

我通过这种方式创build了构build脚本,以使stream浪机的构build尽可能快,并且尽可能小的泊坞窗(仍然需要在这里工作)。 另外,因为我想删除Jenkins设置GUI,并创build了一个默认的pipe理员帐户。

Vagrantfile:

 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 

Makefile文件:

 SHELL:=/bin/bash jenkins: cd docker-image && docker build -t draven/jenkins . 

如果没有其他的指示,stream浪提供总是运行所有的提供者。

解决scheme是通过首先删除相同名称的容器(如果存在)来使docker provisioner达到幂等级:

 config.vm.provision "shell", run: "once", inline: <<-SHELL cd /vagrant \ && docker ps -a -f "name=jenkins" \ && docker rm jenkins; make jenkins \ && docker run -d \ --name jenkins \ -p 80:8080 -p 50000:50000 \ -v #{jenkins_dir}:#{jenkins_dir} \ draven/jenkins SHELL