Ubuntu/AWS环境下Docker Compose挂载${PWD}本地卷失败求助
问题解决:Docker Compose卷挂载路径错误(/storage/data-db不存在)
问题根源
错误显示Docker尝试挂载/storage/data-db而非预期的/home/ubuntu/storage/data-db,核心原因是使用sudo执行docker-compose时,环境变量${PWD}未继承当前用户的工作目录。sudo默认会重置环境变量,此时${PWD}会指向root用户的主目录(通常是/root),但你实际的工作目录在/home/ubuntu/,导致路径解析完全错误。
解决方案
方案1:使用绝对路径替代环境变量
直接在docker-compose.yml中写死主机绝对路径,彻底避免环境变量解析问题:
volumes: data-db: driver: local driver_opts: type: none o: bind device: /home/ubuntu/storage/data-db data-wp: driver: local driver_opts: type: none o: bind device: /home/ubuntu/storage/data-wp
方案2:保留环境变量运行docker-compose
使用sudo -E参数保留当前用户的环境变量,确保${PWD}正确解析为/home/ubuntu/:
sudo -E docker-compose -f ubuntu-container-bundle.yml up -d && sudo -E docker-compose -f ubuntu-container-bundle.yml logs -f
方案3:简化挂载方式(推荐)
无需定义named volume,直接在WordPress和数据库的services配置中使用bind mount,写法更简洁且不易出错:
services: db: # 其他配置... volumes: - /home/ubuntu/storage/data-db:/var/lib/mysql wordpress: # 其他配置... volumes: - /home/ubuntu/storage/data-wp:/var/www/html
这种方式跳过了named volume的driver_opts配置,直接映射主机目录到容器内,减少配置复杂度。
额外说明
你之前的排查操作(清理卷、重启Docker、强制重建)未解决问题,是因为问题本质是环境变量解析错误,而非卷缓存或目录权限问题。只要路径解析正确,结合你已确认的目录权限,挂载即可正常工作。
内容的提问来源于stack exchange,提问作者Jorge Mauricio
相关产品推荐
相关产品推荐

