Portainer - 加载环境失败

IT疑难杂症诊疗室 10w+人浏览 768人参与

在这里插入图片描述

在将Portainer升级到Community Edition 2.33.5 LTS版本后,遇到了本地环境无法加载、Stack管理失效的问题。尽管容器本身仍在运行,但Portainer界面显示环境为“Down”,且无法通过UI管理现有Stack。尝试了多种方法,包括重建Portainer容器、删除Portainer数据库并重新初始化,但这导致Stack虽然可见,却带有“有限控制”的提示,且无法正常部署。 尝试重新部署Stack时,系统提示同名Stack已存在。最终的解决方案是:发现重新部署的Stack使用了新的项目ID,导致无法关联旧数据。通过删除新Stack的数据,并将旧Stack的数据文件夹复制到新项目ID对应的位置,然后执行docker compose up,成功恢复了所有Stack及其数据,解决了管理难题。

1. Portainer容器升级后加载环境失败

事情发生的原因是打开Portainer的管理界面,有提示让我升级到LTS版本。我手欠,就升级到了Community Edition
2.33.5 LTS版本。当我再打开Portainer时,登录界面可以正常登录。本地环境也是显示Up的,但是只要一点本地环境,那个状态就变成Down了。

在这里插入图片描述

我在服务器上查看容器的状态,倒是没受影响。但是无法进行任何的更改了,因为原来是通过Portainer的UI界面来管理Stack的。而在服务器上,存放Docker-Compose文件的地方和实际存放容器数据的地方并不在一起。

2. 重建容器

我尝试重新拉镜像并重新创建容器,可以进入到本地环境的管理界面。虽然显示有stacks,但是只能看见portainer自己的stack,别的stack都没有了。

在这里插入图片描述

但是点开容器选项,发现容器都还在。容器的管理也都是好用的。

在这里插入图片描述

3. 重建Stack

我想,既然不显示,那我就再重建一下Stack就好了。首先需要切换到root用户,再进入到/data/compose文件夹下。通过在Portainer的Container界面里查看Docker Compose文件的位置找到它。

在这里插入图片描述

然后复制内容到Portainer GUI的Stacks > Add Stack菜单下,再Deploy。

在这里插入图片描述

这时又出现了无法部署的情况,说是同名的Stack已经存在了。

4. 重建Portainer

后来我实在没有办法了,只能将Portainer自己的本地数据库给删除了。根据你Portainer的Docker Compose文件的不同,实际位置不一定相同。在容器内部是在/data文件夹下面。因为Portainer并没有提供Shell,无论是bash还是sh都没有。所以依赖于你映射出来的文件。

我自己的Portainer的Docker Compose文件是这样的。我没有放到Nginx的反向代理后面,因为我不想因为Nginx的原因导致我无法管理到其他的容器。确切地说,我的Nginx也是被Portainer管理的。

services:
  portainer:
    image: portainer/portainer-ce:latest
    container_name: portainer
    restart: always
    ports:
      - "9443:9443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./portainer_data:/data
      - /etc/letsencrypt/live/zenseek.site/fullchain.pem:/certs/fullchain.pem
      - /etc/letsencrypt/live/zenseek.site/privkey.pem:/certs/privkey.pem
    command: >
      --sslcert /certs/fullchain.pem
      --sslkey /certs/privkey.pem

将Portainer的容器停掉,再将/data/portainer.db删除。删除前先备份一份到别的地方。再重新启动容器,因为它自身的数据库没有了,它会当成是新的实例,重建本地的数据库。

在这里插入图片描述

这时就和新创建的Portainer实例一样需要设置管理员账号密码。但是进去之后是可以直接看到本地环境的,也可以点进去。

在这里插入图片描述

当我满心欢喜地进到Stack选项的时候,发现Stack都回来了。但是后面标识了是有限的控制。这种情况只有是在不使用Porainer直接在本地Docker Compose Up起来的stack才会这样。因为它的Docker Compose文件和data是放在不同的地方,且需要root权限。即使我在存放Docker Compose文件的文件夹下Docker Compose Down也是不好用的。在这种情况,我既不能通过Docker CLI也不能通过Portainer来管理Stack。

5. 解决方案

中间我问了Gemini,ChatGPT,Clause和Deepseek,也尝试了很多的方法。发现StackOverflow上也有很多人反应同样的问题,但是上面的解决方案对于我并不好用。

这时我想到刚才的报错说是有容器占用了那个stack,我就想能不能把那个容器删除了再部署呢?但是我就怕,删除容器后,数据恢复就没有了。本来使用Portainer是为了方便的,结果出了这种情况,导致无法管理Stack。早知道这样,还不如一个文件夹一个文件夹部署Docker Compose的文件和数据了。

但是在走投无路的情况下,我找了不是那么重要的容器删除了。然后进行重新再Add Stack,我发现可以部署了,而且小叹号也没有了。但是数据呢?全没了,这一个新的部署。

在这里插入图片描述

在细心的观察下,我发现新的部署使用了不同的项目ID,因此导致无法加载过去的数据。我把Docker Compose Down掉后,将新的项目下的数据都删除,将就项目ID的数据文件夹复制过来。再Docker Compose Up一下,一切就完好如初了。问题就这样解决了。

在这里插入图片描述

📚 延伸阅读

更多内容持续更新于我的博客:https://www.zenseek.site

### Portainer-CE 中文文档和支持 对于希望获取Portainer-CE中文资料或支持的用户来说,有多个资源可以利用。首先,在官方安装过程中可以通过`docker search portainer`来查找可用的镜像版本[^1]。 #### 获取Portainer-CE中文汉化版 为了获得更好的用户体验以及本地化的帮助,可以选择已经进行了中文汉化的开源项目。例如,基于特定标签(如2.9.1/2.16.2)构建的`portainer-ce`提供了完整的中文界面和功能[^2]: ```bash # 下载并运行带有中文界面的Portainer容器实例 docker pull ghcr.io/mirrors/portainer-ce:latest docker run -d -p 9000:9000 --name=portainer \ --restart=always \ -v /var/run/docker.sock:/var/run/docker.sock \ -v portainer_data:/data \ ghcr.io/mirrors/portainer-ce:latest ``` 此外,还有专门针对中国用户的`portainer-cn`项目,它不仅包含了最新的特性更新还优化了对不同硬件架构的支持(X86, ARM, ARM64),并且保持了良好的维护状态[^3]: ```bash # 部署适用于多种平台的中文版Portainer服务端口映射至主机9000端口 docker pull gitcode.com/gh_mirrors/po/portainer-cn:latest docker run -d -p 9000:9000 --name=portainer_cn \ --restart=unless-stopped \ -v /var/run/docker.sock:/var/run/docker.sock \ -v portainer_cn_data:/data \ gitcode.com/gh_mirrors/po/portainer-cn:latest ``` #### 教学培训中的应用 考虑到教育场景下的实际需求,Portainer-CN因其直观易懂的操作界面而被广泛应用于各类Docker技术的教学活动中,使得学员能够更加轻松地上手实践操作[^4].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值