2017-08-21 3 views
1

質問:迷惑メールの作成時に初めてドッキング画像を作成して実行する方法はありますか?Dockerは最初の迷惑メール対策でのみ構築して実行します

問題:vagrant provisionを実行すると、docker: Error response from daemon: Conflict. The container name "/jenkins" is already in use by container <snip>というエラーが表示されます。

追加情報:私はを実行しました。私はプラグインをインストールしたので、自動的にインストールするplugins.txtファイルに追加しました。

このようにして、迷惑メールマシンの構築をできるだけ速くし、ドッカーのイメージをできるだけ小さくするために、ビルドスクリプトを作成しました(まだここで動作する必要があります)。また、私はJenkinsセットアップGUIを削除したいので、デフォルトの管理者アカウントを作成しました。

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 . 

答えて

1

ベイグラント提供RU他に指示がない場合はすべての提供者。

ソリューションが存在した場合に最初に同じ名前のコンテナを削除することで、あなたのドッキングウィンドウのプロビジョニングの冪等をすることです:

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 
+0

私の 'jenkins_home /'フォルダは削除されませんので、これは私のために働く必要があります。 'docker ps -a -f" name = jenkins "は必要ですか?もしそうなら、なぜですか?コンソールに内容を表示することはできませんか? – Draven

+0

-aは実行中のコンテナだけでなく、-fはドッカーで直接フィルタリングすることですが、 '|グレープジェンキンス '。出力が必要ない場合は、stdout(およびstderr)を/ dev/nullにリダイレクトすることができます(この[answer](https://stackoverflow.com/a/876267/3775614)を参照)。 –

+0

申し訳ありませんが、私の質問は不明だと思います。 'docker ps -a -f" name = jenkins "' 'docker rm jenkins'でコンテナを止めるのに必要なのですか? 'docker rm jenkins'を' docker ps'の出力に依存しないので、私はそれだけですべて使うことができます。 – Draven

関連する問題