portainer必须运行在docker环境中,不能脱离dockerd单独安装;需先安装并启动docker服务,再通过docker run命令部署,挂载正确的/var/run/docker.sock和命名数据卷,并使用portainer/portainer-ce:latest镜像。

Portainer 必须运行在 Docker 环境里,不能脱离 dockerd 单独安装。如果你还没装好 Docker,docker run 命令根本执行不了——这是所有失败的起点。
docker command not found 或 Cannot connect to the Docker daemon
这不是 Portainer 的问题,是 Docker 本身没跑起来或权限没配对。
- 先确认服务状态:
sudo systemctl status docker,如果显示inactive,立刻执行sudo systemctl start docker - 非 root 用户必须加进
docker组:sudo usermod -aG docker $USER,然后newgrp docker或重新登录终端 - Ubuntu/Debian 别装错包:
sudo apt install docker.io(不是docker),CentOS/RHEL 用官方docker-ce仓库,别依赖系统自带的podman-docker兼容层 - 验证是否真就绪:
sudo docker run --rm hello-world,不报错才算过关
docker run 启动 Portainer 容器时挂载错了
最常卡住的两个点:套接字路径不对、数据卷没用命名卷。
-
/var/run/docker.sock必须用绝对路径挂载,写成/tmp/docker.sock或漏掉-v参数,Portainer就看不见任何容器,页面空白或报Got permission denied while trying to connect to the Docker daemon socket - 数据卷必须用
docker volume create portainer_data创建,再以-v portainer_data:/data方式挂载;千万别用-v ./portainer-data:/data这种相对路径——工作目录一变就失效,重建容器后配置全丢 - 镜像名必须是
portainer/portainer-ce:latest,portainer/portainer已弃用,拉不到新版本
能访问 localhost:9000 但登录后 endpoints 显示 Down
说明容器起来了,但和本地 Docker 引擎通信失败,通常不是网络问题,而是权限或 SELinux 拦截。
- 检查
docker ps是否真有portainer容器在运行;再执行docker exec portainer ls -l /data,应看到portainer.db和certs/目录,否则数据卷挂载失败 - SELinux 启用时(
getenforce返回Enforcing),即使挂了/var/run/docker.sock也会被拦截;临时解决:sudo setenforce 0;长期方案是配 SELinux 策略或改permissive模式 - 防火墙可能拦了端口:CentOS 用
sudo firewall-cmd --permanent --add-port=9000/tcp,Ubuntu 用sudo ufw allow 9000
该用 9000 还是 9443?
端口选错不会导致启动失败,但会影响能不能正常访问。
-
9000是 HTTP 端口,不加密,仅限内网调试;浏览器输http://localhost:9000即可 -
9443是 HTTPS 端口,Portainer CE默认启用并自签证书;公网或跨网络访问必须用它,否则现代浏览器直接拦截 - 反向代理(如 Nginx)场景下,关掉
Portainer内置 HTTPS,只开9000,由代理层终结 TLS - 想同时开两个端口:
-p 9000:9000 -p 9443:9443,但别漏--restart=always,否则宿主机重启后容器不自动拉起
docker ps 里有 portainer 就以为完事了,其实必须登录后点左侧菜单「Endpoints」,确认状态是 Up 才算真正打通。否则所有操作都在黑盒里,连容器列表都刷不出来。











