Ubuntu 23.04执行docker compose提示文件不存在但文件实际存在
问题描述
在Ubuntu 23.04(GNU/Linux 6.2.0-24-generic x86_64)系统中执行命令:
sudo docker compose -f /containers/watchtower/watchtower.yaml up -d
出现错误提示:
stat /containers/watchtower/watchtower.yaml: no such file or directory
但通过ls -l和stat命令可确认该文件确实存在。
相关环境信息:
$ docker compose version Docker Compose version v2.17.2 $ python3 --version Python 3.11.2 $ uname -r 6.2.0-24-generic
watchtower.yaml配置内容:
--- version: "3.8" services: watchtower: image: containrrr/watchtower:latest container_name: watchtower restart: unless-stopped volumes: - /var/run/docker.sock:/var/run/docker.sock environment: - TZ=Europe/London - WATCHTOWER_CLEANUP=true - WATCHTOWER_INCLUDE_STOPPED=true - WATCHTOWER_REVIVE_STOPPED=false - WATCHTOWER_LABEL_ENABLE=false - WATCHTOWER_MONITOR_ONLY=false - WATCHTOWER_TIMEOUT=300 - WATCHTOWER_SCHEDULE=0 16 2 * * *
排查方向
- 检查路径权限:尽管文件存在,但
root用户(通过sudo执行)可能因父目录权限限制无法访问。执行ls -ld /containers /containers/watchtower查看目录权限,确保root拥有r-x权限。 - 排查隐藏字符问题:复制粘贴的路径可能包含不可见特殊字符(如空格、换行、全角符号)。用
realpath /containers/watchtower/watchtower.yaml输出真实路径,对比命令中的路径;或进入目录后用相对路径执行:cd /containers/watchtower && sudo docker compose -f watchtower.yaml up -d。 - 验证挂载目录兼容性:如果
/containers是外部存储挂载点(如NAS),Docker Compose可能无法正确解析该目录下的文件。可将yaml文件复制到本地临时目录(如/tmp),执行sudo docker compose -f /tmp/watchtower.yaml up -d测试,若正常运行则说明是挂载目录的问题。 - 检查安全模块限制:Ubuntu默认启用AppArmor,可能阻止Docker访问特定路径。可临时关闭AppArmor(
sudo systemctl stop apparmor)后重试,若问题解决,需配置AppArmor规则允许Docker访问该路径。 - 核对命令拼写:仔细检查命令中的路径,确认是否存在拼写错误(如
/container少了s)或大小写问题(Linux系统区分文件名大小写)。
内容的提问来源于stack exchange,提问作者crackpot
相关产品推荐
相关产品推荐

