gpt4 book ai didi

Docker 仅在第一次 vagrant up 时构建和运行

转载 作者:行者123 更新时间:2023-12-02 19:35:27 25 4
gpt4 key购买 nike

问题:有没有一种方法可以仅在首次创建 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 文件:

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 .

最佳答案

如果没有另外说明,Vag​​rant Provision 总是运行所有的 Provisioner。

一个解决方案是通过首先删除同名容器(如果存在)来使您的 docker 配置程序具有幂等性:

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

关于Docker 仅在第一次 vagrant up 时构建和运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45804652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com