Docker Compose部署Sendy容器失败:路径不存在问题求助
解决Portainer部署Sendy容器的路径找不到问题
问题根源
错误里的/data/compose/126/var/docker/project-sendy是Portainer内部的映射路径,说明你的Docker Compose文件里的build上下文路径配置错误,导致Portainer无法在它的工作目录下定位到你的Sendy项目文件。
具体修复步骤
1. 修正Docker Compose的Build上下文
不要在Compose文件里写服务器的绝对路径(比如/var/docker/project-name),改用相对路径(相对于Compose文件所在的目录)。因为Portainer部署栈时会把你上传的项目文件映射到它内部的目录,绝对路径会导致它找不到文件。
正确的Compose配置示例(适配外部数据库):
version: '3.8' services: sendy: build: . # 用当前目录作为构建上下文,Portainer会自动处理路径映射 ports: - "80:80" # 根据你的需求调整端口 environment: # 外部数据库配置,替换成你的实际信息 DB_HOST: 你的外部数据库地址 DB_NAME: 你的Sendy数据库名 DB_USER: 数据库用户名 DB_PASS: 数据库密码 # Sendy基础配置 APP_URL: http://你的域名或服务器IP FROM_EMAIL: 你的发件邮箱
2. 正确上传项目文件到Portainer
- 把你的
docker-compose.yml、Dockerfile和sendy-6.0.2.zip打包成一个zip文件。 - 在Portainer的「部署栈」页面,选择「上传」选项,上传这个zip包,而不是单独粘贴Compose内容。这样Portainer会自动把所有文件放到正确的映射目录里,避免路径错误。
3. 验证本地文件结构
确认你的服务器上/var/docker/project-name目录的文件结构完全正确(大小写敏感):
/var/docker/project-name/ ├── docker-compose.yml ├── Dockerfile └── sendy-6.0.2.zip
同时检查Dockerfile里的解压命令,确保它能正确找到zip文件,比如:
COPY sendy-6.0.2.zip /tmp/ RUN unzip /tmp/sendy-6.0.2.zip -d /var/www/html/ && rm /tmp/sendy-6.0.2.zip
4. 清理Portainer旧缓存
如果之前部署过错误的栈,先删除该栈,然后手动清理Portainer的对应缓存目录(比如/data/compose/126/,这里的126是你的栈ID,替换成实际ID),再重新部署。
额外注意点
- 确保外部数据库已经允许你的服务器IP访问,检查数据库的防火墙白名单和权限设置。
- 部署前可以先在服务器本地用
docker-compose build测试构建,确认没有路径问题,再用Portainer部署。
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

