1.拉取鏡像並啟動容器
docker run -d -p 8080:8080 -p 50000:50000 -v $(pwd)/data:/var/jenkins_home --name jenkins jenkins
2.通過docker ps命令你會發現jenkins容器沒有運行起來
3.通過docker ps -a查看所有容器並找到對應的Jenkins容器編號,並通過命令查看對應的日志
docker logs Jenkins
錯誤信息如下:
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?
分析:
我們檢查一下之前啟動方式的"/var/jenkins_home"目錄權限,查看Jenkins容器的當前用戶: 當前用戶是"jenkins"而且"/var/jenkins_home"目錄是屬於jenkins用戶擁有的。
docker run -ti --rm --entrypoint="/bin/bash" jenkins -c "whoami && id
控制台輸出:
docker run -ti --rm --entrypoint="/bin/bash" jenkins -c "ls -la /var/jenkins_home"
控制台輸出:
而當映射本地數據卷時,/var/jenkins_home目錄的擁有者變成了root用戶
docker run -ti --rm -v $(pwd)/data:/var/jenkins_home --entrypoint="/bin/bash" jenkins -c "ls -la /var/jenkins_home"
控制台輸出:
這就解釋了為什么當"jenkins"用戶的進程訪問"/var/jenkins_home"目錄時,會出現 Permission denied
的問題
我們再檢查一下宿主機上的數據卷目錄,當前路徑下"data"目錄的擁有者是"root",這是因為這個目錄是Docker進程缺省創建出來的。
ls -la data
控制台輸出:
發現問題之后,相應的解決方法也很簡單:把當前目錄的擁有者賦值給uid 1000
,再啟動"jenkins"容器就一切正常了。
遞歸授權並再次啟動jenkins
sudo chown -R 1000 data
docker start Jenkins
最后輸入瀏覽器地址:http://IP:8080回車 你會發現終於看到老頭子了 當然了你還需要安裝對應的插件。