Docker 在 docker 里的 jenkins 容器安装 python,服务器断开链接后,重新连提示 bash: python: command not found

testjson · 2022年08月24日 · 最后由 小狄子 回复于 2022年08月25日 · 7230 次阅读

当时安装成功后,验证了,python 已安装成功
软链接也已经创建了
断开服务器链接后,重新连,就提示 bash: python: command not found

共收到 8 条回复 时间 点赞

可能原因:

1、重连的容器不是原来的容器。比如你通过类似 docker run -it jenkins:latest /bin/bash 命令启动容器并自动进入命令行,然后退出命令行,这时候容器会一并被关闭。重新 run 就会从镜像新建容器,而非启动原有容器。

2、你虽然装了,但相关路径没有加到 PATH 环境变量,所以还是找不到

建议排查一下。

PS:不是很建议在容器里面手动装软件或环境。容器最好应该是无状态的(可以理解为啥都不存,只是单纯一个有处理逻辑的程序),随时可以重建。需要有状态的部分(比如数据),可以通过路径映射之类的方式存到容器外,或者直接自定义一个镜像构建脚本,把要装的东西加到镜像里,让每次启动就自动带上。

陈恒捷 回复

你说的第一种情况我看了不是,我进的就是原来的容器

陈恒捷 回复

你说的 2,我理解了一下,也找了相关的资料,找到了一篇文章,你看下是不是就以这种方式安装,安装在 linux 宿主机商
https://www.cnblogs.com/wjafl/p/16523043.html

陈恒捷 回复

你的意思是 docker 容器里最好什么都不要装是吧

testjson 回复

你三楼找到的这篇,是完全脱离 docker 的,这么装没问题,因为 linux 主机本身是有状态的(所有改动不会消失),不会像容器那样设计时就是很低的销毁成本。

然后我意思是,进入 docker 容器一般只建议做调试查错类工作(比如测试下某条命令是否可以正常执行之类的),不要做环境配置类工作(如装新软件)。
环境配置类的东西,尽量在镜像里就配置好,这样才更接近 docker 的理念:拿着镜像直接部署使用。

1、进入容器后,进入 python 安装目录执行 python 命令,成功吗?
2、会不会软连接问题,删掉重试
3、应该是想 python 环境吧,既然都在 Linux 安装了 Jenkins 容器了,你把 Linux 系统作为 Jenkins 的 slave,配置一下节点。

  1. 如果想一劳永逸,把安装步骤写进 Dockerfile。
  2. 如果不会写 Dockerfile,手动装完,记得 commit 重新打个新镜像。

docker exec 进去的时候的 root 是 no-login 的 shell ,你进入容器后再 su - root 一下试试,应该就有了,或者把容器内 ssh 服务启动,22 端口对外映射出来,直接通过 xshell 等工具 login 进去,就也是 login 的 shell 了

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册