DevOps

Jenkinsコンテナ内でdocker not foundが出る場合の対処法

前回の記事ではDockerを使ってNginxリバースプロキシ + Jenkinsの環境を構築しました。

Dockerを用いたJenkins+Nginx+SSL化の作業メモ

今回はCI/CDに使われるJenkinsサーバーの環境構築について取り上げます。   Jenkinsを使うだけであればGoogle Cloud Platform Marketplaceなどで ...

続きを見る

実際に使ってみるとJenkinsコンテナを使っていることでいくつか問題が生じます。例えばagentにdockerイメージを指定したい場合、単純にコンテナ内でDockerインストールするだけでは動きません。

Dockerコンテナ内でDockerを動かす状況になってしまうため、いわゆるDocker on Dockerの環境を構築する必要があります。

 

まずホスト側のDockerソケットをマウントする必要があります。(ホストとDockerデーモンを共有します)

docker-composeの例:

version: "3.8"
services:
  jenkins:
    build:
      context: .
    restart: unless-stopped
    ports:
      - "8080:8080"
      - "50000:50000"
    volumes:
      - jenkins_home:/var/jenkins_home
      - /var/run/docker.sock:/var/run/docker.sock
volumes:
  jenkins_home:

 

加えてコンテナにDockerクライアントをインストールする必要があります。Dockerfile内でインストール手順を書きます。

インストール方法はリポジトリを追加する方法もありますが、下記の例ではスクリプトを使った簡単な方法でインストールしています。

Dockerfileの例:

FROM jenkins/jenkins:2.234
# デフォルトではPermission Errorが起こる
USER root

RUN apt-get update
# Jenkins agentでDocker動作のため
RUN curl -sSL https://get.docker.com/ | sh

jenkins/jenkinsイメージはデフォルトではroot権限を持たないユーザによって実行されています。そのままではソケットにアクセスする権限がないためPermission errorが起こってしまいます。

そのため上の例ではUserをrootに変更しています。rootユーザを使いたくない場合は下記の例が参考になります。

 

以上の手順でJenkins Pipelineにてagentにdockerを指定することが出来ます。

deployの失敗はまた別の話

 

以上

 

参考:

 

この記事は参考になりましたか?

下記のボタンよりアンケートにご協力お願いします。

-DevOps
-,

© 2020 エンジニアの本棚