在Docker容器中执行apt install报错Permission denied解决及Docker安装Jenkins代码持续发布的版本v2.164、Found invalid crumb问题

一、在Docker容器中执行apt install安装报错(13: Permission denied)

        在UBUNTU服务器中启动了一些docker容器,但容器中缺少很多命令,比如vim就没有,于是执行apt install vim,但报错E: Could not open lock file /var/lib/dpkg/lock-frontend - open (13: Permission denied)

etherpad@52ab2c3f5da8:/opt/etherpad-lite$ apt-get update
Reading package lists... Done
E: List directory /var/lib/apt/lists/partial is missing. - Acquire (13: Permission denied).

        很明显是用户权限问题,于是加入有万金油之称的privileged选项,使用--privileged=true参数配置,container内的root拥有真正的root权限,否则container内的root只是外部的一个普通用户权限,但即使这样依然报错。

        最后使用docker -u root指定用户(指定和当前宿主机一样的用户运行容器)解决问题。可能针对使用docker run -v有目录挂载的情况,需要采用这种方式来规避出现 permission denied。如果不是root,可以在宿主机里创建和容器默认一样的用户,然后把要映射的文件目录使用chown -R user:group方式修改为docker里的用户。另外此问题也许和服务器的SELinux安全机制有关联,有条件可以试试关闭sentenforce。

二、使用docker安装jenkins代码持续发布:Jenkins from v2.60.3 to v2.164.3 or later

    之前搭建过多次jenkins平台,不过还没有使用docker搭建过,但相信这一定是一个更方便办法。因为我爱docker。在docker中搜索jenkins,可以看到已经有官方的镜像包了。热度非常高。使用docker pull拉取镜像安装过程记录如下:

root@med-1:/# docker search jenkins
NAME                                   DESCRIPTION
jenkins                                Official Jenkins Docker image                   4959         
jenkins/jenkins                        The leading open source automation server       2275
...
root@med-1:/# docker pull jenkins
Using default tag: latest
Status: Downloaded newer image for jenkins:latest
docker.io/library/jenkins:latest
root@med-1:/# mkdir /opt/jenkins_data
#添加发布专用用户并指定密码用于发布
root@med-1: /#useradd  -d /home/jenkins -m -s /bin/bash jenkins
root@med-1: passwd jenkins 
......
#启动jenkins
root@med-1:~# docker run -d -p 8080:8080 --name jenkins -u root -v /opt/jenkins_data:/var/jenkins_home jenkins

    启动成功后能正常访问8080页面,但在加载安装插件时全都报错,调用docker查看日志发现报错为 Caused by: java.io.IOException: Matrix Project Plugin v1.18 failed to load. - You must update Jenkins from v2.60.3 to v2.164.3 or later to run this plugin。提示jenkins版本太低,需要更新。看来docker中的jenkins版本好久没有更新了。可以直接进入容器中 /usr/local/jenkins 目录,下载官方镜像最新版jenkins,替换容器中原有的/usr/local/jenkins/jenkins.war。也可以在容器外下载传入容器内。

#进入docker容器中
cd /usr/local/jenkins
wget http://mirrors.jenkins.io/war/latest/jenkins.war

    再次进入即解决You must update Jenkins from v2.60.3 to v2.164.3 or later to run this plugin。问题,更新后我这里的版本是Jenkins 2.265版本。期间在容器中碰到不少问题,比如Cant find any collection named fabfile fab: not found。根本没有fab环境。可以参见: jenkins代码发布平台No module...named fabfile、Jenkins提示Access Denied没有全部Read权限问题及python版本导致ImportError_jenkins error 403 no valid crumb was included in t-CSDN博客 不过这里是需要在容器中安装pip来安装fab,同时容器中的默认python版本是2.7,我这里最后都直接下载安装,希望容器中的python版本也赶紧升级,看提示在2021.1.1.之后就不会再支持了。安装过程记录如下:

#缺少setuptools模块,下载安装
ImportError: No module named setuptools
wget https://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c11.tar.gz
tar zxvf setuptools-0.6c11.tar.gz
cd setuptools-0.6c11
python setup.py install

#安装pip模块
wget https://files.pythonhosted.org/packages/08/25/f204a6138dade2f6757b4ae99bc3994aac28a5602c97ddb2a35e0e22fbc4/pip-20.1.1.tar.gz
tar zxvf pip-20.1.1.tar.gz
cd pip-20.1.1
python setup.py install

#docker容器自带python2.7后续问题
root@bc2290456599:~# pip install fabric==1.14.0
DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained. pip 21.0 will drop support for Python 2.7 in January 2021. More details about Python 2 support in pip,can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support

三、docker下安装jenkins出现Found invalid crumb问题

        使用docker安装的jenkins,然后将jenkins.war包更新到了最新版(2.265)解决了docker中版本过老的提示问题,但在使用最新版的时候,开始还都挺好的,但突然执行任务保存时发现保存不了,从个人判断是JS执行问题,甚至浏览器中还有报JS跨域错误:The Cross-Origin-Opener-Policy header has been ignored, because the origin was untrustworthy. It was defined either in the final response or a redirect. Please deliver the response using the HTTPS protocol. You can also use the 'localhost' origin instead. 查看容器中的错误日志,报:2020-11-09 09:55:24.938+0000 [id=21]   WARNING hudson.security.csrf.CrumbFilter#doFilter: Found invalid crumb 354bb484547d84f65767e559be774acb6f1f3a3a88d2ac02d8279e11623b17d7. If you are calling this URL with a script, please use the API Token instead. More information: https://jenkins.io/redirect/crumb-cannot-be-used-for-script

        错误关键词:Found invalid crumb 。和CSRF验证有关联,有说使用Strict Crumb Issue插件来解决。进入Jenkins插件管理,Available选项,搜索Strict Crumb插件安装Strict Crumb Issuer插件,然后进入jenkins->系统设置->全局安全设置->跨站请求伪造保护,把下拉选项改成Strict Crumb Issue,点开右下高级设置,去除掉Check the session ID选项选中。但我这里这样操作之后仍然不行。

        无奈再次进入jenkins下载索引页面:http://mirrors.jenkins.io/war/ 下载了2.187/这个版本。因为有说从2.189之后才碰到了这个问题。但切换版本之后碰到了一堆插件版本不兼容问题,jenkins列出一列要降级的插件版本,我全部选中进行安装,但在安装过程中出现了错误,导致整个jenkins成了僵尸了。浏览器报错,服务也没有任何反应。最后我再版本切换回最新版2.265,神奇地又能使用了!先这样保存一版日志,后续再用。

        另外使用docker搭建pythonWeb服务,用的tiangolo/uvicorn-gunicorn-fastapi镜像,安装后fastapi的目录在 /usr/local/lib/python3.8/site-packages/fastapi。如果需要修改静态文件的位置,docker容器下就进入容器这个目录下的 openapi/docs.py 里修改,本CSDN博客中已经有相关的文章。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林戈的IT生涯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值