You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决GCP中Docker Compose卷名随启动用户变化的问题

解决GCP启动脚本运行Docker Compose时卷名不一致问题

问题分析

核心问题出在Docker Compose的卷名生成逻辑:

  • 用jeorfevre用户手动运行时,Compose会自动以当前工作目录名作为卷名前缀,生成jeorfevre_mariadb_data这类合法名称
  • GCP启动脚本运行时,工作目录无有效名称(或为空),加上sudo执行时未继承用户环境变量,导致Compose默认项目名称为空,卷名前缀变成下划线,最终生成_mariadb_data这种以非法字符开头的卷名,触发创建失败

从日志可见,启动脚本中的$USER变量为空,说明sudo运行时未继承用户环境,进一步导致Compose无法获取有效前缀。

解决方案

以下两种方法均可固定卷名,任选其一即可:

方法1:指定COMPOSE_PROJECT_NAME环境变量

在启动脚本中运行docker compose前,强制设置COMPOSE_PROJECT_NAME=jeorfevre,让Compose始终用这个名称作为卷名前缀,不受当前用户或工作目录影响。

修改后的启动脚本:

echo " --------------------- STARTUP SCRIPT ---------------------------"
echo "  - checkup "

docker version
docker volume ls

curl -sSL https://raw.githubusercontent.com/bitnami/containers/main/bitnami/suitecrm/docker-compose.yml > docker-compose.yml

echo "  - Setting project name to jeorfevre"
COMPOSE_PROJECT_NAME=jeorfevre sudo docker compose up -d
echo " -----------      END       -----------"

方法2:直接修改Docker Compose文件的卷名

把docker-compose.yml中的卷名改成完整的固定名称,不再依赖Compose的自动前缀逻辑。

修改后的docker-compose.yml:

version: '2'
services:
  mariadb:
    image: docker.io/bitnami/mariadb:10.6
    environment:
      # ALLOW_EMPTY_PASSWORD is recommended only for development.
      - ALLOW_EMPTY_PASSWORD=yes
      - MARIADB_USER=bn_suitecrm
      - MARIADB_DATABASE=bitnami_suitecrm
      - MARIADB_PASSWORD=bitnami123
    volumes:
      - 'jeorfevre_mariadb_data:/bitnami/mariadb'
  suitecrm:
    image: docker.io/bitnami/suitecrm:8
    ports:
      - '80:8080'
      - '443:8443'
    environment:
      - SUITECRM_DATABASE_HOST=mariadb
      - SUITECRM_DATABASE_PORT_NUMBER=3306
      - SUITECRM_DATABASE_USER=bn_suitecrm
      - SUITECRM_DATABASE_NAME=bitnami_suitecrm
      - SUITECRM_DATABASE_PASSWORD=bitnami123
      # ALLOW_EMPTY_PASSWORD is recommended only for development.
      - ALLOW_EMPTY_PASSWORD=yes
    volumes:
      - 'jeorfevre_suitecrm_data:/bitnami/suitecrm'
    depends_on:
      - mariadb
volumes:
  jeorfevre_mariadb_data:
    driver: local
  jeorfevre_suitecrm_data:
    driver: local

使用该方法时,启动脚本无需额外修改,直接运行sudo docker compose up -d即可。

验证

修改完成后重新启动GCP实例,查看启动日志会发现Compose开始创建jeorfevre_mariadb_data和jeorfevre_suitecrm_data卷,与手动运行时的卷名完全一致,不会再触发非法卷名的错误。

内容的提问来源于stack exchange,提问作者jeorfevre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 06:32:21