前提
Docker/Kubernetes 実践コンテナ開発入門 の 2.6 Composeによる複数コンテナの実行
で 以下のようにvolumesをマウントするところでの問題です。
version: "3" services: master: container_name: master image: jenkins: latest ports: - 8080:8080 volumes: - ./jenkins_home:/var/jenkins_home
問題
上のdocker-compose.ymlを実行すると
$ docker-compose up Creating master ... done Attaching to master master | touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied master | Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions? master exited with code 1
このように Permission deniedとなり起動できません。 そのため、以下の対応が必要になります。
対応
version: "3" services: master: container_name: master image: jenkins:latest ports: - 8080:8080
docs.docker.com こちらに書かれているようにvolumesを追記してあげればファイルを共有できるようになります。
$ docker-compose up Creating master ... done Attaching to master master | Running from: /usr/share/jenkins/jenkins.war master | webroot: EnvVars.masterEnvVars.get("JENKINS_HOME") master | Jan 28, 2020 10:09:19 AM Main deleteWinstoneTempContents master | WARNING: Failed to delete the temporary Winstone file /tmp/winstone/jenkins.war master | Jan 28, 2020 10:09:19 AM org.eclipse.jetty.util.log.JavaUtilLog info master | INFO: Logging initialized @370ms master | Jan 28, 2020 10:09:19 AM winstone.Logger logInternal master | INFO: Beginning extraction from war file master | Jan 28, 2020 10:09:21 AM org.eclipse.jetty.util.log.JavaUtilLog warn master | WARNING: Empty contextPath master | Jan 28, 2020 10:09:21 AM org.eclipse.jetty.util.log.JavaUtilLog info master | INFO: jetty-9.2.z-SNAPSHOT master | Jan 28, 2020 10:09:22 AM org.eclipse.jetty.util.log.JavaUtilLog info master | INFO: NO JSP Support for /, did not find org.eclipse.jetty.jsp.JettyJspServlet master | Jenkins home directory: /var/jenkins_home found at: EnvVars.masterEnvVars.get("JENKINS_HOME") master | Jan 28, 2020 10:09:22 AM org.eclipse.jetty.util.log.JavaUtilLog info master | INFO: Started w.@47404bea{/,file:/var/jenkins_home/war/,AVAILABLE}{/var/jenkins_home/war} master | Jan 28, 2020 10:09:22 AM org.eclipse.jetty.util.log.JavaUtilLog info master | INFO: Started ServerConnector@458342d3{HTTP/1.1}{0.0.0.0:8080} master | Jan 28, 2020 10:09:22 AM org.eclipse.jetty.util.log.JavaUtilLog info
確認
$ docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 494f2620e919 jenkins:latest "/bin/tini -- /usr..." 16 seconds ago Up 14 seconds 0.0.0.0:8080->8080/tcp, 50000/tcp master $ docker exec -it master /bin/bash jenkins@494f2620e919:/$ cat /var/jenkins_home/ cat: /var/jenkins_home/: Is a directory jenkins@494f2620e919:/$ ls /var/jenkins_home/ .bash_logout .profile hudson.model.UpdateCenter.xml jenkins.CLI.xml logs/ plugins/ secrets/ users/ .bashrc config.xml identity.key.enc jenkins.install.UpgradeWizard.state nodeMonitors.xml secret.key updates/ war/ .java/ copy_reference_file.log init.groovy.d/ jobs/ nodes/ secret.key.not-so-secret userContent/
ファイルまで確認。volumesのマウントとは違うけどとりあえず見れたから目的は達成。
ここらへん確認してると、まず一回volumeマウントしないで chown -R 1000 /var/jenkisn_home
するような解決作もあるっぽいけど、
今回はそれはなんか違う気がしたのでいったんこれで。
追記
jenkins_home ディレクトリの権限を編集( chmod 777 jenkins_home
)すれば問題なく動く。