DockerコンテナでJenkinsを実行していますが、JenkinsはMavenビルドを実行しようとしています。ビルドの一部として、dockermavenプラグインはdockerイメージをビルドするように指示します。
POMのその部分は以下のとおりです。
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.3.8</version>
<configuration>
<imageName>example</imageName>
<baseImage>Java:latest</baseImage>
<skipDockerBuild>false</skipDockerBuild>
<cmd>["Java", "-jar", "myLogThread-jar-with-dependencies.jar"]</cmd>
<resources>
<resource>
<directory>target/</directory>
<include>config.properties</include>
</resource>
<resource>
<directory>${project.build.directory}</directory>
<include>myLogThread-jar-with-dependencies.jar</include>
</resource>
</resources>
</configuration>
</plugin>
Mavenビルドは、イメージのビルドを試みるまで実行されます。ビルドが試行されると、次のエラーメッセージが表示されます。
[INFO] Building image example
[INFO] I/O exception (Java.io.IOException) caught when processing request to {}->unix://localhost:80: Permission denied
正しいディレクトリに移動でき、Dockerfileがそこにあります。
Sudo docker build .
を実行することもでき、問題なくイメージがビルドされます。
Mavenビルドが失敗するのはなぜですか? localhost:80に対してどのような要求が行われていますか? Mavenがイメージを構築できるように、これを修正するにはどうすればよいですか?
注:このコンテナーにdockerソケットとバイナリをマウントしました
Rajith Delanthaが前述したように、これで問題は解決しました。
追加:DOCKER_OPTS=' -G jenkins'
を/etc/default/docker
に直接追加します。
次に、Sudo service docker restart
でDockerサービスを再起動します。
これは、JenkinsにDOCKER_Host
環境変数を追加することで解決できます。
Dockerデーモンを次のようにセットアップします。
[/etc/sysconfig/docker]
OPTIONS="-H tcp://127.0.0.1:4243"
Jenkins Jobs(環境変数を挿入):
DOCKER_Host=tcp://127.0.0.1:4243
同じ問題が発生しましたが、ローカルマシンで発生しました。
Githubスレッドでこのコメントを読んだ後、私はそれを手に入れました: https://github.com/docker/compose/issues/1214#issuecomment-256774629
それは言う:
解決策( https://docs.docker.com/engine/installation/linux/debian/ から、Debianでのみ機能するわけではありません):
Dockerグループがまだ存在しない場合は、追加します。
Sudo groupadd docker
接続されたユーザー「$ {USER}」をdockerグループに追加します。優先ユーザーに一致するようにユーザー名を変更します。これを有効にするには、ログアウトしてから再度ログインする必要がある場合があります。
Sudo gpasswd -a ${USER} docker
Dockerデーモンを再起動します。
Sudo service docker restart
Jenkinsでも同じ問題が発生しました。
Dockerグループにjenkinsを追加しました
Sudo usermod -aG docker jenkins
次に、ジェンキンスを再構築します。
Dockerデーモンを実行していないときに同様の問題が発生しました-Dockerツールボックスを再起動すると、今でははるかに幸せに見えます
docker ps
がmvn
を実行しているのと同じユーザーから機能することを確認した後も、同じ問題が発生しました。画像名に特殊文字が含まれているため、バグのように見えます。 Dockerイメージ名からダッシュ記号(-)(または特殊文字)を削除することで解決しました。
リポジトリを別の名前に設定して確認してみてください。
<configuration>
<repository>somename</repository>
</configuration>
私はbamboo-agentで問題に遭遇しましたが、ジェンキンスについても同じことが当てはまると思います。
Mavenを実行しているユーザーをdockerグループに追加します。次に、DockerとMavenを実行しているサービスを再起動します。サービスの実行中は、グループの変更は読み込まれません。だから私の場合:
Sudo groupadd docker # if it does not exist
Sudo usermod -a -G docker bamboo-user
Sudo systemctl restart docker.service
Sudo systemctl restart bamboo-agent.service
私は両方の賛成の答えの要素を組み合わせることによって問題を解決することができました。
/etc/default/docker
で別のポートを使用するようにオプションを設定します。
DOCKER_OPTS="-H tcp://127.0.0.1:4243"
Dockerデーモンを再起動します。
Sudo service docker restart
次に、パッケージをビルドします。
export DOCKER_Host=tcp://127.0.0.1:4243
mvn clean package docker:build