你的浏览器还没开启 Javascript 功能!

WSL + Docker + Jenkins + Proxyの地雷を解決する

WSLのDockerでJenkinsを動かしてみようと思い、軽い気持ちでdocker-compose up -dを走らせてみたところ、どエライ地雷を踏んでしまいました。そして、見事に爆死!!

子供の保育園を送迎する並の軽い作業が火事場の人命救助並に難易度となってしまった… orz

WSL2が待ち遠しい…

前提

  • WSL+Docker環境が構築済みであること。まだの人はここを参考にしてみてください

失敗パターン

簡単に失敗パターンを紹介します

docker-compose.ymlを作成

version: '3'
services:
  jenkins_master:
    image: jenkins/jenkins:lts-jdk11
    environment:
    - JENKINS_OPTS=--prefix=/jenkins
    - TZ=Asia/Tokyo
    - HTTP_PROXY=${http_proxy}
    - HTTPS_PROXY=${https_proxy}
    - JAVA_OPTS=-Dhttp.proxyHost=${PROXY_HOST} -Dhttp.proxyPort=${PROXY_PORT} -Dhttp.proxyUser=${PROXY_USER} -Dhttp.proxyPassword=${PROXY_PASS} -Dhttps.proxyHost=${PROXY_HOST} -Dhttps.proxyPort=${PROXY_PORT} -Dhttps.proxyUser=${PROXY_USER} -Dhttps.proxyPassword=${PROXY_PASS}
    ports:
      - '18080:8080'
      - '15000:5000'
    volumes:
      - ./jenkins_home:/var/jenkins_home
      - ~/.m2:/var/m2

docker-compose 実行

docker-compose up -d

結果

touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied
Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?

ほうほう、ならば権限を設定してあげようではないか。

sudo chown -R 1000 ./jenkins_home

再実行の結果1

touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied
Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?

ほうほう、ならばWSLからマウントしたWindowsのドライブでパーミッションを扱えるようにしてみようじゃないか。

sudo vim /etc/wsl.conf

[automount]
options = "metadata"

再実行の結果2

touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied
Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?

成功パターン

Windowsファイルシステムを絡むとややこしいな…

WSLの中でVolume作るか。

docker volume作成

docker volume create jenkins_home

docker-compose.ymlを修正

version: '3'
services:
  jenkins_master:
    image: jenkins/jenkins:lts-jdk11
    environment:
    - JENKINS_OPTS=--prefix=/jenkins
    - TZ=Asia/Tokyo
    - HTTP_PROXY=${http_proxy}
    - HTTPS_PROXY=${https_proxy}
    - JAVA_OPTS=-Dhttp.proxyHost=${PROXY_HOST} -Dhttp.proxyPort=${PROXY_PORT} -Dhttp.proxyUser=${PROXY_USER} -Dhttp.proxyPassword=${PROXY_PASS} -Dhttps.proxyHost=${PROXY_HOST} -Dhttps.proxyPort=${PROXY_PORT} -Dhttps.proxyUser=${PROXY_USER} -Dhttps.proxyPassword=${PROXY_PASS}
    ports:
      - '18080:8080'
      - '15000:5000'
    volumes:
      - jenkins_home:/var/jenkins_home
      - ~/.m2:/var/m2

volumes:
  jenkins_home:
    external: true

docker-compose 実行

今度こそ。

docker-compose up -d

キターーーーーー!!

パスワード??

あぁ、コンテナに入ってみてみるか~

docker exec -it jenkins_master_1 /bin/bash

cat /var/jenkins_home/secrets/initialAdminPassword

あとは、画面指示に従って次へ次へと進みます。

まとめ

WSL2が待ち遠しい…(2回目)